swift - 如何获取 NSMetadataItem 的 URL - macOS Cocoa Swift 3

标签 swift xcode macos cocoa spotlight

我正在 mac OS 上编写第一个应用程序,我想在我的 mac 上找到所有 XCode 文件(项目)。所以我写了一些代码:

NotificationCenter.default.addObserver(self, selector: #selector(initalGatherComplete(notification:)), name:   NSNotification.Name.NSMetadataQueryDidFinishGathering , object: nil)

metadataQuery.searchScopes = [NSMetadataQueryLocalComputerScope]
metadataQuery.predicate = NSPredicate(format: "kMDItemFSName contains %@ OR kMDItemFSName contains %@", argumentArray: [".xcworkspace", ".xcodeproj"])

metadataQuery.operationQueue = OperationQueue.main
metadataQuery.start()

而且它工作正常。我收到项目属性键:

["kMDItemContentTypeTree", "kMDItemContentType", "_kMDItemOwnerUserID", "kMDItemPhysicalSize", "kMDItemKind", "kMDItemDateAdded", "kMDItemContentCreationDate", "kMDItemContentModificationDate", "kMDItemLogicalSize", "kMDItemDisplayName", "kMDItemUsedDates", "kMDItemLastUsedDate", "kMDItemUseCount", "kMDItemFSName", "kMDItemFSSize", "kMDItemFSCreationDate", "kMDItemFSContentChangeDate", "kMDItemFSOwnerUserID", "kMDItemFSOwnerGroupID", "kMDItemFSNodeCount", "kMDItemFSInvisible", "kMDItemFSTypeCode", "kMDItemFSCreatorCode", "kMDItemFSFinderFlags", "kMDItemFSHasCustomIcon", "kMDItemFSIsExtensionHidden", "kMDItemFSIsStationery", "kMDItemFSLabel"]

现在,问题是如何获取我收到的项目的 URL?在属性中我找不到任何文件在光盘上的位置。

最佳答案

您可以通过提取路径属性来收集项目的 URL:

var urls = [URL]()
for result in metadataQuery.results {
    if let item = result as? NSMetadataItem,
        let path = item.value(forAttribute: NSMetadataItemPathKey) as? String {
        urls.append(URL(fileURLWithPath: path))
    }
}

关于swift - 如何获取 NSMetadataItem 的 URL - macOS Cocoa Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554761/

相关文章:

iphone - quartz 无需其他库就能渲染pdf吗?

macos - 无法使用 ssh-add 加载私钥

ios - 返回上一个应用程序(Swift ios)

ios - 如何使用 iOS,swift 将前置摄像头聚焦在设备上?

ios - Storyboard本地化不包括 iOS 中的单个文件

ios - 是否可以为不同的 iPhone 屏幕设置宽度和高度?

macos - 没有这样的小桶 :/usr/local/Cellar/git

ios - UIKit Collection View ,奇怪的行为(访问/滚动单元格)

ios - 属性字符串前景色在 Swift 中不起作用

swift - Eureka- 根据 ActionSheetRow 值隐藏行