2011-12-01 50 views
2

我正在使用AssetsLibrary框架检索iPhone中的所有资产组。我有一些代码片段是这样的:ALAssetsLibrary enumerateGroupsWithTypes不返回任何数据

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)当我运行我在iPhone模拟器应用程序(使用命令+在Xcode R),该groupEnumerator会执行和组名称将被打印在控制台上

2)我为我的应用程序编写了一些单元测试,当我运行单元测试时(在Xcode中使用命令+ U),调用上面的代码片段在我的应用程序中,groupEnumerator似乎根本没有被执行,并且没有任何组名会被打印,并且failureBlock也不会被调用,并且我没有得到任何错误n运行测试,但组枚举不起作用,因为它在应用程序中。我知道这个方法(enumerateGroupsWithTypes:usingBlock:failureBlock :)是异步的,但是,即使我在单元测试中等了很长时间,我也没有看到groupEnumerator被执行。

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

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

+0

只是为了在这里清楚:这个,当你运行单元测试,权利只是失败? –

+0

是的,如果我在iOS模拟器中运行应用程序,它没有任何问题,但如果我运行我的单元测试它不输出任何东西。 – nybon

回答

1

将这个问题困住了好几天,找不出这个问题的确切原因。

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

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