【发布时间】:2017-04-15 04:02:24
【问题描述】:
NSMetadataQuery 类似乎是 Finder/Spotlight 通过元数据搜索文件的方式。
由 Foundation 框架提供的 NSMetadataQuery 类。查询可以以两种模式运行:异步和带实时更新的异步。第一个简单地对初始搜索时存在的文件执行搜索。后者继续搜索。随着满足或不再满足搜索参数更新的文件更新数据。
但是,它似乎是围绕提供一个目录 (searchScopes),然后异步返回在这些目录中找到的结果 (NSMetadataQueryDidFinishGathering)。
我已经有一个包含文件 url 的 NSArray。我想使用与 Spotlight 搜索相同的元数据和查询语法来构建这些 NSURL 的过滤器/搜索。但我会提供一个文件列表来快速归档,而不是提供一个目录并接收异步结果。
// Something like this...
let imageFileTypePredicate = NSPredicate(fromMetadataQueryString: "(kMDItemGroupId = 13)")
let imageURLs = allURLs.filter{ imageFileTypePredicate.evaluate(with:$0) };
但是,这是使用标准 NSPredicate 搜索而不是文件元数据过滤器并引发错误:
此类不符合键 _kMDItemGroupId 的键值编码。
此处列出了我感兴趣的 Spotlight 元数据属性:
https://developer.apple.com/library/content/documentation/CoreServices/Reference/MetadataAttributesRef/Reference/CommonAttrs.html#//apple_ref/doc/uid/TP40001694-SW1
Spotlight 元数据如何过滤文件 url 数组?
【问题讨论】:
标签: cocoa nspredicate spotlight nsmetadataquery