使用 NSMetadataQuery 搜索文件什么都不做
Searching for files using NSMetadataQuery does simply nothing
我尝试使用 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,但也许有更好的方法?
谢谢!
检查你的 predicate syntax。 LIKE
运算符不适用于 NSMetadataQuery
谓词搜索(事实上,NSPredicate
在 Spotlight 元数据搜索的上下文中使用了一组非常相似但实际上不同的运算符和行为。)
NSMetadataQuery
的 glob 搜索语法只使用等号:
NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)
我尝试使用 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,但也许有更好的方法?
谢谢!
检查你的 predicate syntax。 LIKE
运算符不适用于 NSMetadataQuery
谓词搜索(事实上,NSPredicate
在 Spotlight 元数据搜索的上下文中使用了一组非常相似但实际上不同的运算符和行为。)
NSMetadataQuery
的 glob 搜索语法只使用等号:
NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)