如何过滤 NSMetadataQuery
How do I filter NSMetadataQuery
我正在尝试创建一个带有谓词的 NSMetadataQuery
。在某一时刻,我可能想要收集 iCloud 在另一时刻可能拥有的所有图像的所有视频。别的什么都不要,就是搜视频或者搜图。不能同时。
我创建了这段代码:
CFStringRef whatToFilter = kUTTypeImage;
if (self.filterType == kKindVideo) {
whatToFilter = kUTTypeVideo;
}
NSPredicate *predType = [NSPredicate predicateWithFormat:@"(%K == %@)", NSMetadataItemContentTypeKey, whatToFilter];
NSMetadataQuery *newQuery = [[NSMetadataQuery alloc] init];
[newQuery setSearchScopes:@[NSMetadataQueryUbiquitousDocumentsScope]];
newQuery.predicate = predType;
一旦我将此谓词添加到 newQuery
,它就会给我零结果。
此查询的正确语法是什么?不要告诉我谓词对 NSMetadataQuery
也不起作用,因为排序也不起作用。
创建正确 NSMetadataQuery
谓词的最佳方法是使用 Finder 的查询表达式编辑器,如下所示:
然后将其另存为智能文件夹并在生成的文件夹中获取信息:
在这种情况下,相关的 Spotlight 查询语法是:"(kMDItemUserTags == 'Assets'cd)"
...(忽略 _kMDItemGroupId
子表达式,因为以下划线开头的属性名称不是 public API.)
最后,让NSPredicate
弄清楚它要如何重写查询字符串:
let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")
我正在尝试创建一个带有谓词的 NSMetadataQuery
。在某一时刻,我可能想要收集 iCloud 在另一时刻可能拥有的所有图像的所有视频。别的什么都不要,就是搜视频或者搜图。不能同时。
我创建了这段代码:
CFStringRef whatToFilter = kUTTypeImage;
if (self.filterType == kKindVideo) {
whatToFilter = kUTTypeVideo;
}
NSPredicate *predType = [NSPredicate predicateWithFormat:@"(%K == %@)", NSMetadataItemContentTypeKey, whatToFilter];
NSMetadataQuery *newQuery = [[NSMetadataQuery alloc] init];
[newQuery setSearchScopes:@[NSMetadataQueryUbiquitousDocumentsScope]];
newQuery.predicate = predType;
一旦我将此谓词添加到 newQuery
,它就会给我零结果。
此查询的正确语法是什么?不要告诉我谓词对 NSMetadataQuery
也不起作用,因为排序也不起作用。
创建正确 NSMetadataQuery
谓词的最佳方法是使用 Finder 的查询表达式编辑器,如下所示:
然后将其另存为智能文件夹并在生成的文件夹中获取信息:
在这种情况下,相关的 Spotlight 查询语法是:"(kMDItemUserTags == 'Assets'cd)"
...(忽略 _kMDItemGroupId
子表达式,因为以下划线开头的属性名称不是 public API.)
最后,让NSPredicate
弄清楚它要如何重写查询字符串:
let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")