Я планирую получить / добавить все 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" );
}];
}