使用 NSMetadataQuery 搜索文件根本不做任何事情



我尝试使用 NSMetadataQuery 和 NSPredicate 来搜索文件。经过几个小时的尝试和寻找解决方案(我是 swift 的新手),我有一个小例子。它编译得很好,但结果为零。我尝试了不同的谓词,但最后元数据查询.结果计数始终为 0。有人知道出了什么问题吗?

class AppDelegate: NSObject, NSApplicationDelegate {
var metadataQuery: NSMetadataQuery!
var metadataQueryDidUpdateObserver: AnyObject?
var metadataQueryDidFinishGatheringObserver: AnyObject?

@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(aNotification: NSNotification) {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "initalGatherComplete:", name: NSMetadataQueryDidFinishGatheringNotification, object: nil)
    metadataQuery = NSMetadataQuery()
    metadataQuery.searchScopes = [NSMetadataQueryIndexedLocalComputerScope]
    metadataQuery.predicate = NSPredicate(format: "%K LIKE '*'", NSMetadataItemFSNameKey)
    metadataQuery.startQuery()
}
func initalGatherComplete(notification: NSNotification) {
    metadataQuery.stopQuery()
    let resultCounter = metadataQuery.resultCount
    NSLog("%lu", resultCounter)
    NSNotificationCenter.defaultCenter().removeObserver(self, name: NSMetadataQueryDidFinishGatheringNotification, object: nil)
}
最后

但并非最不重要的一点是:当前谓词应列出所有文件,但最后谓词应仅列出应用程序。 创建此类谓词的最佳做法是什么?我计划过滤扩展.app但也许有更好的方法?

谢谢!

检查谓词语法。 LIKE运算符不可用于谓词搜索NSMetadataQuery(事实上,NSPredicate在 Spotlight 元数据搜索的上下文中使用一组非常相似但实际上不同的运算符和行为。

NSMetadataQuery 的 glob 搜索语法只使用等号:

NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)

最新更新