我尝试使用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,object: nil) }
最后但并非最不重要:当前谓词应该列出所有文件,但最后谓词应该只列出应用程序.什么是创建这样一个谓词的最佳实践?我打算过滤扩展名.app但也许有更好的方法?
谢谢!
检查你的
predicate syntax. LIKE运算符不适用于NSMetadataQuery谓词搜索(事实上,nspredicate在Spotlight元数据搜索的上下文中使用了一组非常相似但实际上不同的运算符和行为.)
NSMetadataQuery的glob搜索语法只使用等号:
nspredicate(format: "%K ==[cd] '*'",NSMetadataItemFSNameKey)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。