<分区>
<分区>
我有以下内容:
__block ALAssetsGroup* album = nil;
ALAssetsLibrary* library = [ALAssetsLibrary new];
[library enumerateGroupsWithTypes: ALAssetsGroupAlbum
usingBlock:
^ (ALAssetsGroup *group, BOOL *stop) {
if (group) {
NSString* title =
[group valueForProperty: ALAssetsGroupPropertyName];
if ([title isEqualToString: @"Test1"]) {
album = group;
*stop = YES;
NSLog(@"sd%@", album.description);
}
} else { // afterwards
self.images = [self showFirstPhotoOfGroup:album]; // (oreilly, programming ios 7, ch.17)
NSLog(@"A:%d",[_images count]); // return photo count
if (!album) {
NSLog(@"%@", @"failed to find album");
return;
}
}
}
];
NSLog(@"B:%d",[_images count]);
NSLog A:正确地将相册中的项目数显示为 2。
NSLog B:显示0。事实上,它在 block 之前被处理!
我明白为什么它会这样做 - 但这是苹果提供的示例。请你告诉我如何让 _images 将其值保留在 block 之外。该 block 似乎具有完全不同的范围。
多年来我一直在尝试将专辑加载到数组中 - 但这个 block 示例并不能在 block 之外保存它的值!
最佳答案
答案的线索在于您自己的观察 - NSLog B 在 NSLog A 之前处理。方法 enumerateGroupsWithTypes:usingBlock:failureBlock
被记录为 异步,因此它可以在枚举任何内容之前返回。所以你的问题与保留值等无关,而只是你在工作完成之前寻找结果。
您必须设计您的应用程序,以便在枚举完成后完成任何依赖于枚举的事情。 enumerateGroupsWithTypes
的文档指出,在枚举完成后,将再次调用该 block 并传递 nil
,您需要对此进行测试并使用它来触发相关操作。
HTH
关于IOS访问 block 外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938789/
相关文章:
ios - 如何通过 Firebase 邀请通过动态链接发送用户信息
ios - iOS Facebook SDK 3.1 的设置按钮不起作用
iphone - 当我们单击表格 View 单元格中的按钮时,如何检索该特定单元格标签中的文本
ios - 在 iOS 中当设备语言为阿拉伯语时显示英文键盘和类型
javascript - Phonegap - 如何从索引页面调用另一个文件中的一个 javascript 函数?
iphone - 在iOS应用程序中显示 "Tip of the day"(不使用服务器)
ios - 如果我要复制 NSObject 子类,是否需要复制其类型 "UIViewAnimationOptions"和 BOOL 类型的属性?如果是这样,怎么办?