首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤NSMetadataQuery

如何过滤NSMetadataQuery
EN

Stack Overflow用户
提问于 2016-01-27 10:41:57
回答 1查看 608关注 0票数 2

我正在尝试用谓词创建一个NSMetadataQuery。在某一点上,我可能想收集所有的视频,iCloud可能在另一点,所有的图像。我不想要别的东西,只想搜索视频或图像。不是同时发生的。

我创建了以下代码:

代码语言:javascript
复制
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,因为排序也不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-20 15:19:24

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

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

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

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

代码语言:javascript
复制
let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)")
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35035079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档