我正在尝试在应用程序中复制Finder的基于NSPredicateEditor的元数据搜索.
我更愿意免费获得Finder的确切NSPredicateEditor,但除非有人对这个问题有更好的答案,否则看起来我将不得不尽可能地复制Finder的搜索.
在镜像Kind
选项时,我遇到了问题.我开始使用所有可用Kind
选项保存Finder Spotlight搜索.
(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)
我看到的问题是,单个"Kind"用户显示的文本包含多个键路径,这些路径在结果NSPredicate中使用,基于选择的正确值.
"类"可表示(至少)kMDItemContentTypeTree
,_kMDItemGroupId
或kMDItemKind
.
当我创建一个NSPredicateEditorRowTemplate时,我传递一个左表达式,运算符和右表达式的数组.然后创建包含Left/Operator/Right的所有可能排列的行模板.
(注意:我是以编程方式而不是在Interface Builder中创建所有NSPredicateEditorRowTemplate
的).
Finder 没有创建3个左键路径和12个右键值的所有可能排列.它根据右侧拾取的值有选择地分配某个左键路径.
我正在使用NSRuleEditor
的formattingDictionary
属性本地化行模板,基于此处的指南:http://funwithobjc.tumblr.com/post/1482915398/localizing-nspredicateeditor
我可以将"Kind"的相同本地化分配给两个不同NSPredicateEditorRowTemplate
s 中的两个不同的键路径表达式.
当我使用相同的左键路径表达式将两个行模板本地化为"Kind"时,以下"合并模板"引用为true,并且列表中只显示一个"Kind".右侧弹出窗口是两个模板中所有vaule的联合集.
在运行时,NSPredicateEditor将模板合并在一起,第二个弹出窗口将显示日期模板的所有操作符的并集.http://www.cocoabuilder.com/archive/cocoa/282859-nspredicateeditorrowtemplate-and-dynamic-templateviews.html
但是,当我创建两个行模板,都使用不同的左键路径表达式本地化为"Kind"时,我在左侧表达式弹出窗口中获得两个"Kind"行.模板未合并.
我应该如何复制Finder的行为?我需要以某种方式合并左键路径,如果它们具有相同的本地化,即使它们表示不同的键路径/表达式,从而产生具有多个左键路径的单行模板,每个路径具有独立的右值集.