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 でコマンド + R を使用)、groupEnumerator が実行され、グループ名がコンソールに出力されます。

2)アプリの単体テストを作成しました。単体テストを実行すると(Xcodeでコマンド+ Uを使用)、アプリで呼び出されたときに上記のコードスニペットを呼び出しますが、groupEnumeratorはまったく実行されないようで、何も実行されませんグループ名の .

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 に答える