NSMetadataQuery次のコマンドをモデルにして、Spotlight で利用可能なすべてのオーディオを検索する を 作成しました。これにより、多くの結果が返されます。
mdfind kMDItemContentTypeTree == "public.audio"
私が使用しているコードは次のとおりです。
NSMetadataQuery * q = [[[NSMetadataQuery alloc] init] autorelease];
[q setPredicate:[NSPredicate predicateWithFormat:@"kMDItemContentTypeTree == 'public.audio'", nil]];
NSLog(@"%@", [[q predicate] predicateFormat]);
if ([q startQuery])
while ([q isGathering]) {
NSLog(@"Polling results: %i", [q resultCount]);
[NSThread sleepForTimeInterval: 0.1];
}
[q stopQuery];
}
何らかの理由で、クエリは無期限に収集フェーズに留まり、単一の結果を取得しないようです。これが事実である理由と、できればポーリングを回避して、結果を待っている間にスレッドをブロックするよりエレガントな方法があるかどうかを知りたいです。
私のアプリケーションは実際には Cocoa ではなく NSFoundation に基づいており、これまでのところイベント ループはありません。Spotlight クエリを処理するための従来のアプローチは、イベント通知をサブスクライブすることだと認識していますが、通知を待っている間にブロックする方法がわかりません。そのアプローチは、私の目的には少しやり過ぎに思えます。
私の質問をできるだけ簡単に表現NSMetadataQueryすると、最初の収集フェーズが終了するのを待っている間、スレッドをブロックできますか? もしそうなら、どのように?