我试图在一个应用程序中复制Finder的NSPredicateEditor元数据搜索。
我更愿意免费得到Finder的精确NSPredicateEditor,但是除非有人对这个问题有一个更好的答案,否则我将不得不尽可能地复制Finder的搜索结果。
在镜像Kind选项时,我遇到了一个问题。首先,我保存了带有所有可用Kind选项的Finder搜索。

当我在结果保存的搜索文件夹上Get Info时,查询被列出如下:
(kMDItemContentTypeTree=com.apple.application) &&
(kMDItemContentTypeTree=public.archive) &&
(kMDItemContentTypeTree = public.content) &&
(_kMDItemGroupId = 8) &&
(_kMDItemGroupId = 9) &&
(_kMDItemGroupId = 13) &&
(_kMDItemGroupId = 7) &&
(_kMDItemGroupId = 10) &&
(_kMDItemGroupId = 11) &&
(_kMDItemGroupId = 12) &&
(kMDItemContentTypeTree = public.text) &&
(kMDItemKind = "my_Kind_custom_text*"cdw)我看到的问题是,单个“类”用户显示的文本包含多个密钥路径,这些路径是根据选择的正确值在结果NSPredicate中使用的。
“种类”可以表示(至少) kMDItemContentTypeTree、_kMDItemGroupId或kMDItemKind。
创建NSPredicateEditorRowTemplate时,传递左表达式、运算符和右表达式的数组。然后创建行模板,其中包含左/运算符/右的所有可能的排列()。
(注意:我正在创建所有的NSPredicateEditorRowTemplates 编程而不是在接口生成器中)。
查找器是,而不是,它创建了3个左键路径和12个右值的所有可能的排列。它是根据在右边选择的值有选择地分配某个左键路径。
我正在使用NSRuleEditor的formattingDictionary属性本地化行模板,该属性基于以下指南:http://funwithobjc.tumblr.com/post/1482915398/localizing-nspredicateeditor
I可以在两个不同的NSPredicateEditorRowTemplate中为两个不同的键路径表达式分配相同的“种类”本地化。
当我使用相同的左键路径表达式将两个行模板本地化为“类别”时,下面的“合并模板”引号为真,列表中只显示一个“类别”。右边的弹出框是两个模板中所有金库的联合集合。

在运行时,NSPredicateEditor将将这些模板合并在一起,第二个弹出窗口将显示日期模板的所有操作符的联合。http://www.cocoabuilder.com/archive/cocoa/282859-nspredicateeditorrowtemplate-and-dynamic-templateviews.html
但是,当我创建两个行模板时,使用不同的左键路径表达式,这两个模板都本地化为“类别”,相反,我在左表达式中弹出了两个“类”行。模板没有合并。

我该如何复制Finder的行为?如果左键路径具有相同的本地化,即使它们表示不同的键路径/表达式,我也需要以某种方式合并它们,从而生成一个具有多个左键路径的单行模板,每个左键路径都具有独立的右值集。
发布于 2019-12-09 20:03:51
我的解决方案是拥有一个源属性,然后多个重命名的getter返回该属性。
每个kindImage-type getter都是一个关键路径,可以在谓词编辑器中独立定位。
@objc lazy var kind: String = { return getKind() }()
@objc lazy var kindImage = kind
@objc lazy var kindText = kind
@objc lazy var kindDocument = kind尽管返回相同的值,但谓词编辑器行将不会合并,因为它们使用的是不同的键路径。
https://stackoverflow.com/questions/41575563
复制相似问题