Использование предикатов в контроллере массива для фильтрации связанных объектов - PullRequest
5 голосов
/ 12 мая 2009

У меня есть приложение, использующее базовые данные и привязки. Я хочу иметь NSSearchField, который может искать через NSArrayController, связанный с NSTableView. Контроллер массива содержит объекты Core Data, которые имеют поле «name». Я настроил NSSearchField следующим образом:

Bind To: the array controller
Controller Key: filterPredicate
Predicate Format: name contains[c] $value

Это работает. Я хочу расширить его, чтобы он мог искать в полях объектов, связанных с таковыми в контроллере массива. Каждый объект в контроллере массива имеет отношение «ко-многим» к другому типу объекта с именем «tag», который имеет поле с именем «name». Я попробовал следующее:

Bind To: the array controller
Controller Key: filterPredicate
Model Key Path: tags
Predicate Format: name contains[c] $value

Это, однако, не работает. Ничего не происходит в NSTableView, когда текст вводится в NSSearchField. Что с ним не так?

1 Ответ

10 голосов
/ 13 мая 2009

Привязка к tags, когда путь ключа модели пытается связать предикат поля поиска с путем ключа arrayController.filterPredicate.tags. Поскольку свойство filterPredicate контроллера массива не имеет свойства тегов, вы, вероятно, получаете исключения «ключ не найден», которые регистрируются в автоматическом режиме. Вместо этого, напоминая, что filterPredicate NSArrayController применяется к членам массива, вы хотите, чтобы привязка была настроена примерно так:

Bind To: <array controller>
Controller Key: filterPredicate
Predicate Format: ANY self.tags contains[c] $value

self.tags можно записать как просто tags, но я думаю, это проясняет, что теги - это свойство объекта, к которому применяется предикат.

...