Запустить блок ALAssetLibrary в отдельном потоке - PullRequest
2 голосов
/ 17 ноября 2011

Я планирую получить / добавить все URL-адреса изображений библиотеки фотографий в NSMutableArray в отдельном потоке, не мешая выполнению программы или основного потока.

Мне нужно выполнить процесс на фоне приложения, в то время как другиеоперации продолжаются.

Итак, я написал приведенный ниже код для моего класса делегата приложения "didFinishLaunchingWithOptions" Delegate, а также функцию ViewDidLoad моего класса View Controller.другие функции не работают, пока выполняется блок ALAsset.

Но метод "crcGeneration" работает без нарушения других функций.Как видно из приведенного ниже кода, я вызвал метод "crcGeneration" внутри блока ALAsset в том же потоке после получения всех URL-адресов библиотеки фотографий.

Может ли кто-нибудь сказатьмне хороший способ решить проблему?

OnViewDidLoad:

//Calling the getAllURLofPhotLibraryImages Function on a seperate Thread.
[NSThread detachNewThreadSelector:@selector(getAllURLofPhotLibraryImages) toTarget:self withObject:nil];


Function for Getting all image URL's of PhotoLibrary.
**-(void)getAllURLofPhotLibraryImages**
{
   urlStoreArray = [[NSMutableArray alloc] init];     //global array


      void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
      {
           if(result != NULL)
               {

                // Here storing the asset's image URL's in NSMutablearray urlStoreArr
                NSURL *url = [[result defaultRepresentation] url];
                [urlStoreArray addObject:url];                
          }

      };

      void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop)
      {

           if(group != nil)
           {
                [group enumerateAssetsUsingBlock:assetEnumerator];
           }
           else
           {       

               **[self crcGeneration];**   //Genearting CRC for PhotoLibrary Images using urlStoreArray after got all the Photo Library URL's .
           }

      };
 ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
  [assetslibrary enumerateGroupsWithTypes:ALAssetsGroupAll       usingBlock:assetGroupEnumerator   failureBlock: ^(NSError *error) {        NSLog(@"Failure" );

     }];

}

1 Ответ

0 голосов
/ 29 апреля 2014

Попробуйте получить URL-адрес ресурса следующим образом:

NSURL *url = [result valueForProperty:ALAssetPropertyAssetURL];

Возможно, реализация -defaultRepresentation отправляет синхронно в основную очередь.

...