【问题标题】:Why does Spotlight sometimes not run my query?为什么 Spotlight 有时不运行我的查询?
【发布时间】:2010-11-05 04:20:21
【问题描述】:

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

我没有编写任何特定的应用程序。这只是一个 Spotlight 测试工具,因此不会根据用户输入触发查询。相反,它是在我的控制器内部的applicationDidFinishLaunching: 中配置和执行的。最初我尝试在 awakeFromNib 中执行此操作,但在这种情况下,查询 never 运行。 (我的理论是 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 查询的正确位置。

【问题讨论】:

    标签: cocoa macos macos-carbon spotlight


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 2017-02-15
      • 2021-01-25
      • 1970-01-01
      • 2020-03-08
      • 2023-02-14
      • 1970-01-01
      • 2017-04-06
      • 2019-06-10
      相关资源
      最近更新 更多