我尝试使用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)
}
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要:当前谓词应该列出所有文件,但最后谓词应该只列出应用程序.什么是创建这样一个谓词的最佳实践?我打算过滤扩展名.app但也许有更好的方法?
谢谢!
检查您的谓词语法。该LIKE运算符不可用于NSMetadataQuery谓词搜索(实际上NSPredicate,在 Spotlight 元数据搜索的上下文中使用了一组非常相似但实际上不同的运算符和行为。)
NSMetadataQuery用于 glob 搜索的语法仅使用等号:
NSPredicate(format: "%K ==[cd] '*'", NSMetadataItemFSNameKey)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |