ALAssetsLibrary enumerateGroupsWithTypes 不返回数据

Posted

技术标签:

【中文标题】ALAssetsLibrary enumerateGroupsWithTypes 不返回数据【英文标题】:ALAssetsLibrary enumerateGroupsWithTypes returns no data 【发布时间】:2011-12-01 14:27:01 【问题描述】:

我正在使用 AssetsLibrary 框架来检索 iPhone 中的所有资产组。我有一些这样的代码sn-p:

NSMutableArray *groups = [[NSMutableArray alloc] initWithCapacity:5];
void (^groupEnumerator)(ALAssetsGroup*, BOOL*) = ^(ALAssetsGroup *group, BOOL *stop) 
    if(group != nil) 
        NSLog(@"Adding group %@", [group valueForProperty:ALAssetsGroupPropertyName]);
        [groups addObject:group];
    
;

ALAssetsLibrary* library = [AssetsManager defaultAssetsLibrary];
[library enumerateGroupsWithTypes: ALAssetsGroupSavedPhotos
    usingBlock:groupEnumerator
    failureBlock:^(NSError * err) NSLog(@"Erorr: %@", [err localizedDescription]);];

我发现了一个奇怪的行为:

1) 当我在 ios 模拟器中运行我的应用程序时(在 Xcode 中使用 command + R),groupEnumerator 将被执行并在控制台中打印组名

2)我为我的应用程序编写了一些单元测试,当我运行单元测试(在 Xcode 中使用 command + U)时,它调用了上面的代码 sn-p,因为它在我的应用程序中被调用,groupEnumerator 似乎没有得到完全执行,并且不会打印任何组名,并且 failureBlock 也不会被调用,并且在运行测试时我没有收到任何错误,但组枚举不像在应用程序中那样工作。

我查看了 Apple 的文档,我知道这个方法 (enumerateGroupsWithTypes:usingBlock:failureBlock:) 是异步的,但是,即使我在单元测试中等待了很长时间,我也没有看到 groupEnumerator 被执行。

我正在使用 Xcode 4.2 对 iOS 5.0 进行测试。

感谢任何帮助。谢谢。

【问题讨论】:

只是在这里说清楚:这只会在您运行单元测试时失败,对吧? 是的,如果我在 iOS 模拟器中运行该应用程序,它可以正常工作,但如果我运行我的单元测试,它不会输出任何内容。 【参考方案1】:

在这个问题上卡了几天,无法弄清楚这个问题的确切原因。

我不得不在 Xcode 4 中使用 OCUnit,而不是使用 gh-unit,这实际上解决了这个问题。这似乎与 Xcode 4 运行测试目标的方式有关。

http://gabriel.github.com/gh-unit

【讨论】:

以上是关于ALAssetsLibrary enumerateGroupsWithTypes 不返回数据的主要内容,如果未能解决你的问题,请参考以下文章

保存图像元数据 PHPhotoLibrary 与 ALAssetsLibrary

不推荐使用 ALAssetsLibrary 方法

ALAssetsLibrary.enumerateGroupsWithTypes Swift 中的第一个参数

无法链接 ALAssetsLibrary

从 ALAssetsLibrary 获取所有照片

ALAssetsLibrary 删除 ALAssetsGroup / ALAsset