2

我正在使用 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 进行测试。

任何帮助表示赞赏。谢谢。

4

1 回答 1

1

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

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

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

于 2011-12-08T07:36:34.030 回答