Я создал 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];
}
По какой-то причине запрос, кажется, остается в фазе сбора неопределенно долго и никогда не получает ни одного результата.Я хотел бы знать, почему это так, и существует ли более элегантный способ блокировать поток во время ожидания результата, предпочтительно избегая опроса.
Мое приложение на самом деле не основано на Какао, а наNSFoundation и до сих пор не имеет цикла обработки событий.Я понимаю, что традиционный подход к работе с запросами Spotlight заключается в подписке на уведомление о событии, но я не знаю, как блокировать его при ожидании, и этот подход кажется мне немного излишним.
Чтобы сформулировать мой вопрос как можно проще, могу ли я заблокировать поток, ожидая, пока NSMetadataQuery
завершит начальную фазу сбора?Если да, то как?