2010-06-04 88 views
0

我已經創建了一個NSMetadataQuery搜索可通過聚焦所有的音頻,仿照下面的命令,它會返回大量結果:我可以阻止Spotlight NSMetadataQuery嗎?

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結束初期收集階段?如果是這樣,怎麼樣?

回答

2

而不是[NSThread sleepForTimeInterval:0.1]嘗試:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 

前者實際上是停止線完全,這意味着查詢不能運行。後者有點像睡覺,除了它也允許事件源發射。

相關問題