2

我正在尝试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,因为 sort 也不起作用。

4

1 回答 1

7

创建正确NSMetadataQuery谓词的最佳方法是使用 Finder 的查询表达式编辑器,如下所示:

智能文件夹查询表达式编辑器

然后将其保存为智能文件夹并在结果文件夹中获取信息

智能文件夹信息

在这种情况下,相关的 Spotlight 查询语法是:"(kMDItemUserTags == 'Assets'cd)"...(忽略_kMDItemGroupId子表达式,因为以下划线开头的属性名称不是公共 API。)

最后,让我们NSPredicate弄清楚它希望如何重写查询字符串:

let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")
于 2016-03-20T15:19:24.780 回答