NSMetadataQuery
类似乎是Finder/Spotlight通过其元数据搜索文件的方式。
由基础框架提供的NSMetadataQuery类。查询可以在两种模式下运行:异步的,异步的和动态更新的异步的。第一个简单地对初始搜索时存在的文件执行搜索。后者继续寻找。将数据更新为满足或不再完成搜索参数更新的文件。
ref/doc/uid/TP40001843-BBCFBCAG
但是,它似乎面向提供一个目录(searchScopes
),然后异步返回在这些目录(NSMetadataQueryDidFinishGathering
)中找到的结果。
I已经有了一个包含文件urls的NSArray,I希望使用与Spotlight搜索相同的元数据和查询语法来构造对这些NSURL的筛选/搜索。但是,我将提供一个文件列表,以快速归档,而不是提供一个目录和接收异步结果。
// Something like this...
let imageFileTypePredicate = NSPredicate(fromMetadataQueryString: "(kMDItemGroupId = 13)")
let imageURLs = allURLs.filter{ imageFileTypePredicate.evaluate(with:$0) };
但是,它使用的是标准的NSPredicate搜索,而不是文件元数据筛选器,并且正在抛出错误:
此类与键_kMDItemGroupId不兼容键值编码。
下面列出了我感兴趣的Spotlight元数据属性:
如何使用Spotlight元数据过滤文件urls数组?
发布于 2016-12-01 08:05:32
为每个url创建一个MDItem,以获取文件的聚光灯属性。
MDItem是一个与CF兼容的对象,表示与文件相关的文件和元数据。
https://developer.apple.com/reference/coreservices/1658213-mditem
MDItemRef item = MDItemCreateWithURL(kCFAllocatorDefault, url);
CFArrayRef attributes = MDItemCopyAttributeNames(item);
NSDictionary *attributeValues = CFBridgingRelease(MDItemCopyAttributes(item, attributes));
https://stackoverflow.com/questions/40895007
复制相似问题