我注意到即使我将 *stop BOOL 指针设置为 YES ,我的枚举块也被执行了两次。我以为设置 *stop = YES 会在第一个之后停止?

[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    NSLog(@"Enumerating a group");

    //should stop after first?
    *stop = YES;
} failureBlock:^(NSError *error) {
}];

日志:
2014-03-05 12:27:29:363 AppName[3625:1547] Enumerating a group
2014-03-05 12:27:29:379 AppName[3625:1547] Enumerating a group

从文档来看,-enumerateGroupsWithTypes:usingBlock: 是异步的,但它是否也自动并行化了?两个枚举都发生在主线程上,所以也许我应该强制自己停止?如果 stop 没有按照文档建议的方式完全执行,那么提供 ojit_code 似乎很奇怪。

编辑

对于它的值(value),我添加了我自己的强制执行并且它有效。但为什么我需要这样做?

__block BOOL stopItForReal = NO;
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"枚举一个组");

//不停止枚举
*停止=是;

//实际上停止枚举。我赢了,运行时!
如果(stopItForReal)
返回;
stopItForReal = 是;

} failureBlock:^(NSError *error) {
}];

最佳答案

当组枚举终止时,使用 ALAssetsLibraryGroupsEnumerationResultsBlock 调用 group = nil 。所以你可以这样写:

if (group != nil)
{
    // your code.
}

关于ios - 为什么不 ALAssetLibrary -enumerateGroupsWithTypes :usingBlock: "stop" when I tell it to?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22208655/

10-08 21:02