Cocoa 在同一NSPredicateEditorRowTemplate中合并多个本地化的左键路径?

Cocoa 在同一NSPredicateEditorRowTemplate中合并多个本地化的左键路径?,cocoa,nspredicate,appkit,nspredicateeditor,nspredicateeditorrow,Cocoa,Nspredicate,Appkit,Nspredicateeditor,Nspredicateeditorrow,我正在尝试在应用程序中复制Finder基于NSPredicateEditor的元数据搜索 ,但除非有人对这个问题有更好的答案,否则看起来我将不得不尽可能地复制Finder的搜索 在镜像Kind选项时,我遇到了一个问题。我首先用所有可用的Kind选项保存Finder Spotlight搜索 当我在结果保存的搜索文件夹上获取信息时,查询如下所示: (kMDItemContentTypeTree=com.apple.application) && (kMDItemContentTy

我正在尝试在应用程序中复制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)
我看到的问题是,单个“种类”用户显示的文本包含多个关键路径,这些关键路径根据选择的正确值在生成的NSPredicate中使用

“种类”可以表示(至少)
kMDItemContentTypeTree
\u kMDItemGroupId
kMDItemKind

创建时,传递一个左表达式、运算符和右表达式的数组。然后创建包含左/运算符/右的所有可能排列的行模板

(注意:我正在创建所有
NSPredicateEditorRowTemplate
s)

Finder正在创建3个左键路径和12个右键值的所有可能排列。它是基于在右侧拾取的值选择性地指定某个左关键点路径

我正在使用
NSRuleEditor
formatingdictionary
属性本地化行模板,该属性基于以下指南:

I可以在两个不同的
NSPredicateEditorRowTemplate
s中为两个不同的密钥路径表达式指定相同的“种类”本地化

当我使用相同的左键路径表达式将两个行模板本地化为“种类”时,下面的“合并模板”引号为true,列表中只显示一个“种类”。右侧弹出窗口是两个模板中所有变量的联合集

在运行时,NSPredicateEditor将合并模板,第二个弹出窗口将显示日期模板的所有运算符的联合

但是,当我使用不同的左键路径表达式创建两行模板(均本地化为“种类”)时,我会在左侧表达式弹出窗口中得到两行“种类”。模板不会合并


我应该如何复制Finder的行为?如果左键路径具有相同的本地化,即使它们表示不同的键路径/表达式,我也需要以某种方式合并它们,从而生成一个具有多个左键路径的单行模板,每个左键路径具有独立的右值集

我的解决方案是使用一个源属性,然后使用多个重命名的getter返回该属性

每个
kindImage
类型的getter都是一个关键路径,可以在谓词编辑器中独立定位

@objc lazy var kind: String = { return getKind() }()
@objc lazy var kindImage      = kind
@objc lazy var kindText       = kind
@objc lazy var kindDocument   = kind

尽管返回相同的值,谓词编辑器行将不会合并,因为它们使用不同的键路径。

我会仔细研究一下,但我的直觉告诉我,您将需要一个自定义的
NSPredicateEditorRowTemplate
子类。查找程序使用
NSRuleEditor
。如果所有键路径都相同,是否可以将任意弹出窗口和文本字段放在可合并的行模板中?@Willeke如果关键路径相同,则行合并为我的
Name | Kind
屏幕截图(如果这是你的意思)。如果第一类有两个弹出按钮,如“Image”,而第二类有一个文本字段,如“Other”,它们是否合并?