为什么Spotlight有时不会运行我的查询?

时间:2009-06-23 13:36:27

标签: cocoa macos macos-carbon spotlight

我正在使用Spotlight API,包括Carbon和Cocoa版本,我似乎每隔一段时间就出现同样的问题:查询从不运行,从不触发任何通知。但是,我想强调的是,大多数情况下 运行,所以发生了一些奇怪的事情。

我没有写任何特定的应用程序。这只是一个Spotlight测试工具,因此不会根据用户输入触发查询。相反,它在我的控制器内的applicationDidFinishLaunching:中配置和执行。最初我尝试在awakeFromNib中执行此操作,但在这种情况下,查询从不运行。 (我的理论是RunLoop尚未开始,但我不确定。)

以下是applicationDidFinishLaunching:对碳的代码:

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查询。

1 个答案:

答案 0 :(得分:1)

我在applicationDidFinishLaunching中启动Spotlight查询并且没有任何问题,所以我认为这不是你的问题。

我有几件事要尝试。而不是在addObserver中将nil传递给name:selector:name:object尝试传递NSMetadataQueryDidFinishGatheringNotification作为名称,并进行第二次调用,传递NSMetadataQueryDidUpdateNotification作为名称。第一个将在查询第一次完成运行时生成结果。第二个将提供更新。 (但只有当某些事情发生变化时。)