nspredicate - 如何过滤 NSMetadataQuery

标签 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;

一旦我将此谓词添加到 newQuery,它就会给我零结果。

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

最佳答案

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

Smart Folder query expression editor

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

Smart Folder info

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

最后,让 NSPredicate 弄清楚它要如何重写查询字符串:

let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")

关于nspredicate - 如何过滤 NSMetadataQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035079/

相关文章:

iphone - 过滤 iPhone 地址簿中的联系人

objective-c - 使用 NSPredicate 过滤 NSFileManger 内容以获取文件 'patterns' 的列表

iphone - 为什么这个 NSPredicate 不起作用?

objective-c - CoreData NSPredicate 属性名称

ios - iCloud错误“操作无法完成。 (LibrarianErrorDoman错误10-无法配置集合。)”

ios - 从 iCloud 下载文件时显示进度百分比?

icloud - 如何让 NSMetadataQuery 将我保存的文档文件夹视为包?

swift - iCloud Drive 问题 : "[DocumentManager] Failed to associate thumbnails for picked URL"

ios - 在 iOS 应用中打开 iCloud Drive

swift - iOS 15 中的文档浏览器应用不断创建 iCloud 驱动器文件夹