在同一NSPredicateEditorRowTemplate中合并多个局部左键路径?

问题描述 投票:5回答:1

我正在尝试在应用程序中复制Finder基于NSPredicateEditor的元数据搜索。

[I'd prefer to get the Finder's exact NSPredicateEditor for free,但是除非有人对此问题有一个更好的答案,否则看来我将不得不尽最大可能复制Finder的搜索。

[当镜像Kind选项时,我遇到了问题。首先,使用所有可用的Kind选项保存Finder Spotlight搜索。

Every <code>Kind</code> option in Finder search.

当我在生成的已保存搜索文件夹中单击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_kMDItemGroupIdkMDItemKind

创建NSPredicateEditorRowTemplate时,我传递了一个Left表达式,运算符和Right表达式的数组。然后,创建包含所有可能的排列的Left / Operator / Right的行模板。

((注:我正在创建所有NSPredicateEditorRowTemplateprogramatically rather than in Interface Builder)。

Finder是not”创建3个Left键路径和12个Right值的所有可能排列。它根据在右侧选择的值有选择地分配某个左键路径。

我基于NSRuleEditor的指南,使用formattingDictionaryhttp://funwithobjc.tumblr.com/post/1482915398/localizing-nspredicateeditor属性本地化行模板。

I can

在两个不同的NSPredicateEditorRowTemplate中为两个不同的键路径表达式分配相同的“种类”定位。

当我有两个行模板使用same

左键路径表达式本地化为“种类”时,以下“合并模板”引号为true,并且列表中仅显示一个“种类”。右边的弹出窗口是两个模板中所有值的并集。

two row templates, single key path, same localization

在运行时,NSPredicateEditor将模板合并在一起,第二个弹出窗口将显示日期模板的所有运算符的并集。 http://www.cocoabuilder.com/archive/cocoa/282859-nspredicateeditorrowtemplate-and-dynamic-templateviews.html

但是,当我使用different

左键路径表达式创建两个都定位为“ Kind”的行模板时,我却在左表达式弹出窗口中获得了两个“ Kind”行。模板未合并。

two row templates, two key paths, same localization

我应该如何复制Finder的行为?我需要以某种方式合并左键路径,如果它们具有相同的本地化即使它们代表不同的键路径/表达式

,从而导致具有多个左键路径的单个行模板,每个左键路径具有独立的右值集。

我正在尝试在应用程序中复制Finder基于NSPredicateEditor的元数据搜索。我希望免费获得Finder的确切NSPredicateEditor,但除非有人对...

cocoa nspredicate appkit nspredicateeditor nspredicateeditorrow
1个回答
0
投票

我的解决方案是拥有一个源属性,然后有多个重命名的getter来返回该属性。

© www.soinside.com 2019 - 2024. All rights reserved.