如何过滤NSMetadataQuery

Spa*_*Dog 2 nspredicate nsmetadataquery icloud-drive

我正在尝试创建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;
Run Code Online (Sandbox Code Playgroud)

一旦添加此谓词,newQuery结果将为零。

此查询的正确语法是什么?不要告诉我谓词也不适用于NSMetadataQuery,因为sort也不起作用。

Kae*_*ure 7

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

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

然后将其保存为智能文件夹,并在生成的文件夹上获取信息

智能文件夹信息

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

最后,让我们NSPredicate找出如何重写查询字符串:

let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")
Run Code Online (Sandbox Code Playgroud)