小编bob*_*osh的帖子

在 Swift 2.2 中使用 Spotlight 列出 El Capitan 上已安装的应用程序

我目前正在构建一个 mac 应用程序,将来应该能够在 OS X 上终止和启动应用程序。

为此,我需要找到一种方法来获取机器上所有已安装应用程序的列表。

我已经做了很多研究,并决定使用 Spotlight 和 NSMetadataQuery 来获取列表。

我找到了有关上述主题的这篇文章,并开始在 Swift 2.2(该项目的首选武器)中实现该功能。通过一些翻译,我能够让它工作,代码现在成功构建和运行。但是,在运行时,我似乎遇到了查询本身的问题:

<NSMetadataQuery: 0x6080000e3880> is being deallocated without first calling -stopQuery. To avoid race conditions, you should first invoke -stopQuery on the run loop on which -startQuery was called
Run Code Online (Sandbox Code Playgroud)

这是我目前使用的代码。

    public func doSpotlightQuery() {
    query = NSMetadataQuery()
    let predicate = NSPredicate(format: "kMDItemKind ==[c] %@", "Application")
    let defaultNotificationCenter = NSNotificationCenter()
    defaultNotificationCenter.addObserver(self, selector: #selector(queryDidFinish(_:)), name: NSMetadataQueryDidFinishGatheringNotification, object: nil)
    query.predicate = predicate
    query.startQuery()
}

public func queryDidFinish(notification: NSNotification) …
Run Code Online (Sandbox Code Playgroud)

macos spotlight nspredicate nsmetadataquery swift

5
推荐指数
1
解决办法
975
查看次数

标签 统计

macos ×1

nsmetadataquery ×1

nspredicate ×1

spotlight ×1

swift ×1