Ios 块的执行总是延迟的
我对IOS很陌生。我想在Ios 块的执行总是延迟的,ios,objective-c-blocks,assetslibrary,Ios,Objective C Blocks,Assetslibrary,我对IOS很陌生。我想在viewDidLoad中获取设备上的所有图片。但是块总是在我调用代码中的NSLog(@“%d”,photos.count)之后执行,如下所示。如何处理这类案件 __block NSMutableArray* photos = [[[NSMutableArray alloc] init] retain]; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; void (^assertsEnumerator
viewDidLoad
中获取设备上的所有图片。但是块总是在我调用代码中的NSLog(@“%d”,photos.count)
之后执行,如下所示。如何处理这类案件
__block NSMutableArray* photos = [[[NSMutableArray alloc] init] retain];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
void (^assertsEnumerator)(ALAsset *, NSUInteger , BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result)
{
NSLog(@"Assert name : %@", [result valueForProperty:ALAssetPropertyURLs]);
[photos addObject:[UIImage imageWithCGImage:[result aspectRatioThumbnail]]];
}
};
void (^groupEnumerator)(ALAssetsGroup*, BOOL*) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
NSLog(@"Adding group %@", [group valueForProperty:ALAssetsGroupPropertyName]);
[group enumerateAssetsUsingBlock: assertsEnumerator];
}
};
[library enumerateGroupsWithTypes: ALAssetsGroupSavedPhotos
usingBlock:groupEnumerator
failureBlock:^(NSError * err) {NSLog(@"Erorr: %@", [err localizedDescription]);}];
[library release];
NSLog(@"%d", photos.count);
[photos release];
如前所述,enumerateGroupsWithTypes:usingBlock:failureBlock:
是异步的,因此它不是就地调用,而是计划在下一个运行循环周期内调用。文件中明确说明了原因以及应如何进行:
此方法是异步的。当枚举组时,可能会要求用户确认应用程序对数据的访问;不过,该方法会立即返回。您应该使用enumerationBlock中的资产执行任何需要的工作
谢谢你,哎哟!如果我需要在enumerationBlock中返回一个值,我应该怎么做?如果我在即将到来的delegate回调函数中需要这个值,我该怎么办?你根本做不到,你必须设法解决它。有关更多信息,请参见例如。