我打算在一个单独的线程上将所有照片库图像URL添加/添加到NSMutableArray中,而不会干扰程序或主线程的执行。
我需要在应用程序背景上执行此过程,而其他操作正在进行中。
所以我在我的App Delegate Class “didFinishLaunchingWithOptions” Delegate以及View Controller Class的ViewDidLoad函数中编写了下面的代码。
但是,当执行ALAsset块时,其他功能无效。
但是方法“crcGeneration”正在运行而不会打扰其他功能。正如我在下面的代码中看到的那样,在得到所有照片库URL之后,我在同一个线程中调用了ALAsset Block中的方法“crcGeneration”。
任何人都可以告诉我解决问题的好方法吗?
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" );
}];
}
答案 0 :(得分:0)
尝试获取资产网址:
NSURL *url = [result valueForProperty:ALAssetPropertyAssetURL];
-defaultRepresentation的实现可能同步调度到主队列。