このコードを使用して、バックグラウンド スレッドで通知を処理することができます。
NSMetadataQuery *query = [NSMetadataQuery new];
[query enableUpdates];
// Subscribe to query updates and process then in background thread
[[NSNotificationCenter defaultCenter] addObserverForName:
NSMetadataQueryDidUpdateNotification
object:nil queue:[NSOperationQueue new]
usingBlock:^(NSNotification __strong *notification)
{
// disable the query while iterating
[query disableUpdates];
for (NSMetadataItem *item in query.results)
{
//do here everything you want with the results
//e.g. get values with [item valueForAttribute:NSMetadataItemFSNameKey];
}
[query enableUpdates];
}];
[query startQuery];
ヒントとして:
[NSOperationQueue mainQueue] // added operations execute on the main thread
[NSOperationQueue new] // iOS 4 and higher - guaranteed to be on the background thread
サブスクライブする必要がある最初の結果を処理する PS NSMetadataQueryDidFinishGatheringNotification
- 受信者がクエリの最初の結果収集フェーズを終了したときに投稿され、その後のすべての更新についてNSMetadataQueryDidUpdateNotification
は、私の例のようにサブスクライブする必要があります。クエリには 2 つのフェーズがあるためです。 : 現在一致するすべての結果を収集する最初の収集フェーズと、2 番目のライブ更新フェーズ。