我尝试使用 NSMetadataQuery 和 NSPredicate 来搜索文件。经过几个小时的尝试和寻找解决方案(我是 swift 的新手),我有一个小例子。它编译得很好,但结果为零。我尝试了不同的谓词,但最终metadataQuery.resultCount始终为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 但也许有更好的方法?
Thanks!
检查你的谓词语法 https://developer.apple.com/library/ios/documentation/Carbon/Conceptual/SpotlightQuery/Concepts/QueryFormat.html#//apple_ref/doc/uid/TP40001849-CJBEJBHH. The LIKE
运营商不可用NSMetadataQuery
谓词搜索(实际上NSPredicate
在 Spotlight 元数据搜索上下文中使用一组非常相似但实际上不同的运算符和行为。)
NSMetadataQuery
全局搜索的语法仅使用等号:
NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)