我正在使用 Spotlight API,包括 Carbon 和 Cocoa 版本,我似乎每隔一段时间就会出现同样的问题:查询永远不会运行,也永远不会触发任何通知。但是,我想强调的是,它在大多数情况下都会运行,所以发生了一些奇怪的事情。
我没有写任何特定的应用程序。这只是一个 Spotlight 测试工具,因此不会根据用户输入触发查询。相反,它是在applicationDidFinishLaunching:
我的控制器内部配置和执行的。最初我尝试在 中执行此操作awakeFromNib
,但在这种情况下,查询从未运行。(我的理论是 RunLoop 还没有开始,但我不确定。)
这是applicationDidFinishLaunching:
Carbon 的代码:
CFStringRef predicate = CFSTR("kMDItemContentTypeTree == 'public.movie'");
_query = MDQueryCreate(NULL, predicate, NULL, NULL);
_query = (MDQueryRef)CFMakeCollectable(_query);
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notify:)
name:nil
object:(id)_query];
MDQueryExecute(_query, kMDQueryWantsUpdates);
以上是我凭记忆写的,所以可能包含原文中没有的错别字。原始代码编译并运行得很好,除了偶尔根本不工作。
是什么赋予了?也许applicationDidFinishLaunching:
不是 Spotlight 查询的正确位置。