2010-06-04 77 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]]; 

前者实际上是停止线完全,这意味着查询不能运行。后者有点像睡觉,除了它也允许事件源发射。

相关问题