• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - block 的执行总是延迟

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:50:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我对 IOS 很陌生。我想在 viewDidLoad 中获取设备上的所有图片。但是该 block 总是在我在代码中调用 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];



Best Answer-推荐答案


作为 ALAssetsLibrary documentation状态,enumerateGroupsWithTypes:usingBlock:failureBlock: 是异步的,所以不是在原地调用,而是计划在下一个运行循环周期内调用。文档清楚地说明了这是什么原因以及您应该如何进行:

This method is asynchronous. When groups are enumerated, the user may be asked to confirm the application's access to the data; the method, though, returns immediately. You should perform whatever work you want with the assets in enumerationBlock.

关于ios - block 的执行总是延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478456/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap