我正在使用 AssetsLibrary 框架来检索 iPhone 中的所有资产组。我有一些这样的代码片段:
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)时,它调用了上面的代码片段,因为它在我的应用程序中被调用,groupEnumerator 似乎根本没有被执行将打印组名的名称,并且 failureBlock 也不会被调用,并且在运行测试时我没有收到任何错误,但组枚举不像在应用程序中那样工作。
我查看了 Apple 的文档,我知道这个方法 (enumerateGroupsWithTypes:usingBlock:failureBlock:) 是异步的,但是,即使我在单元测试中等待了很长时间,我也没有看到 groupEnumerator 被执行。
我正在使用 Xcode 4.2 对 iOS 5.0 进行测试。
任何帮助表示赞赏。谢谢。