我正在尝试用谓词创建一个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,因为排序也不起作用。
发布于 2016-03-20 15:19:24
创建正确的NSMetadataQuery谓词的最佳方法是使用Finder的查询表达式编辑器,如下所示:

然后将其保存为智能文件夹,并在结果文件夹上保存Get信息:

在本例中,相关的Spotlight查询语法是:"(kMDItemUserTags == 'Assets'cd)".(忽略_kMDItemGroupId子表达式,因为以下划线开头的属性名不是公共API。)
最后,让NSPredicate弄清楚它希望如何重写查询字符串:
let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")https://stackoverflow.com/questions/35035079
复制相似问题