Объединение нескольких локализованных путей левой клавиши в одном NSPredicateEditorRowTemplate?

Я пытаюсь реплицировать поиск метаданных на основе NSPredicateEditor в приложении.

Я бы предпочел получить точный NSPredicateEditor от Finder бесплатно, но если у кого-то нет лучшего ответа на этот вопрос, похоже, мне придется повторить поиск Finder как можно лучше.

При работе над зеркалированием Kind вариант, я попал в проблему. Я начинаю с сохранения поиска Finder Spotlight со всеми доступными Kind опции.

Каждая опция <code>Get Info</code> в полученной сохраненной папке поиска запрос отображается как:</p><pre><code>(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 =

Проблема, которую я вижу, состоит в том, что один отображаемый пользователем "Добрый" текст содержит несколько ключевых путей, которые используются в результирующем NSPredicate в зависимости от того, какое правильное значение выбрано.

"Добрый" может представлять (как минимум) kMDItemContentTypeTree, _kMDItemGroupId, или же kMDItemKind,

Когда я создаю NSPredicateEditorRowTemplate, я передаю массив левых выражений, операторов и правых выражений. Затем создается шаблон строки, содержащий все возможные перестановки Left / Operator / Right.

(Примечание: я создаю все NSPredicateEditorRowTemplate с программно, а не в Интерфейсном Разработчике).

Finder не создает все возможные перестановки 3-х левых ключевых путей и 12 правых значений. Это выборочное назначение определенного левого ключевого пути на основе значения, выбранного справа.

Я локализую шаблоны строк, используя NSRuleEditor "s formattingDictionary свойства, на основе руководства, найденного здесь: http://funwithobjc.tumblr.com/post/1482915398/localizing-nspredicateeditor

Я могу назначить одну и ту же локализацию "Kind" двум разным ключевым путевым выражениям в двух разных NSPredicateEditorRowTemplate s.

Когда у меня есть два шаблона строки, локализованные для "Kind" с использованием одного и того же левого ключевого выражения пути, следующая цитата "merge the templates" верна, и в списке отображается только один "Kind". Правое всплывающее окно - это объединение всех пар из двух шаблонов.

два шаблона строк, путь с одним ключом, одинаковая локализация

Во время выполнения NSPredicateEditor объединит шаблоны вместе, а второе всплывающее окно покажет объединение всех операторов ваших шаблонов дат. http://www.cocoabuilder.com/archive/cocoa/282859-nspredicateeditorrowtemplate-and-dynamic-templateviews.html

Однако, когда я создаю два шаблона строки, оба локализованных в "Kind", используя разные выражения пути левого ключа, я вместо этого получаю две "Kind" строки во всплывающем окне левого выражения. Шаблоны не объединены.

два шаблона строки, два ключевых пути, одна и та же локализация

Как мне повторить поведение Finder? Мне нужно каким-то образом объединить пути левых клавиш, если они имеют одинаковую локализацию, даже если они представляют разные пути / выражения клавиш, в результате получается единый шаблон строки с несколькими путями левого ключа, каждый с независимым набором правых значений.

0 ответов

Мое решение заключалось в том, чтобы иметь одно исходное свойство, а затем несколько переименованных геттеров, возвращающих это свойство.

Каждый 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

Несмотря на то, что возвращается одно и то же значение, строки редактора предикатов не объединяются, потому что они используют разные ключевые пути.

Другие вопросы по тегам