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