ios – 为什么ALAssetLibrary -enumerateGroupsWithTypes:usingBlock:当我告诉它时“停止”?

发布时间:2020-09-15 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了ios – 为什么ALAssetLibrary -enumerateGroupsWithTypes:usingBlock:当我告诉它时“停止”?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到即使我将* 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:是异步的,但它是否也自动并行化?两个枚举都发生在主线程上,所以也许我应该强制执行自己的停止?如果它没有按照文档建议的方式完全执行,那么提供停止似乎很奇怪.

编辑

为了它的价值,我添加了自己的执行,它的工作原理.但为什么我需要这样做呢?

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

        //does not stop enumeration
        *stop = YES;

        //actually stops enumeration. I win,runtime!
        if (stopItForReal)
            return;
        stopItForReal = YES;

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

解决方法

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

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

总结

以上是编程之家为你收集整理的ios – 为什么ALAssetLibrary -enumerateGroupsWithTypes:usingBlock:当我告诉它时“停止”?全部内容,希望文章能够帮你解决ios – 为什么ALAssetLibrary -enumerateGroupsWithTypes:usingBlock:当我告诉它时“停止”?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!