Как установить отношения, используя NSComboBoxCell, NSTableView и Core Data - PullRequest
1 голос
/ 27 июня 2011

У меня есть пример приложения, над которым я работаю, чтобы помочь мне узнать о базовых данных.В этом приложении я создал модель, состоящую из сущностей «Друг» и «Город».Приложение показывает список моих друзей и их города в NSTableView.В этом табличном представлении я хотел бы, чтобы столбец City был NSComboBoxCell со списком городов.Я получил это далеко ... теперь для проблемы:

Когда я выбираю город из поля со списком, приложение берет значение выбранного города и применяет его к названию города, которым является другв настоящее время с.Вместо этого я хотел бы, чтобы приложение фактически меняло город, из которого пользователь, а не название города ... Это немного запутывает вопрос, поэтому вот пример: начать со списка друзей, таких как

Andy      Asheville
Francois  Montreal
Jeff      Asheville

Если я использую NSComboBoxCell, чтобы изменить город для Энди с Эшвилла на Монреаль, приложение фактически меняет название города Эшвилл на Монреаль, поэтому результат выглядит следующим образом:

Andy      Montreal
Francois  Montreal
Jeff      Montreal

Тамв приложении еще два разных города, но теперь они оба имеют название Монреаль.

Все это имеет смысл для меня, учитывая то, как я настроил свои привязки.Я связал значение столбца таблицы городов, установив Путь к ключу модели в значение «city.name», а в качестве ключа контроллера - selectedObjects, который содержит список друзей.Поэтому, конечно, когда значение ячейки изменяется, оно изменяет city.name.И тогда у меня возникает вопрос, как правильно сделать так, чтобы вместо названия города менялся город?

1 Ответ

3 голосов
/ 29 июня 2011

Цель NSComboBox состоит в том, чтобы «позволить вам либо вводить текст напрямую (как если бы вы использовали NSTextField), либо (...) выбирать из отображаемого списка элементов». (взято из Apple Cocoa Ref).

Итак, поле со списком является прославленным NSTextField. Ожидаемое поведение более соответствует NSPopupButton.

Как вы заметили, привязки NSComboBox изменяют значение имени текущего города, но не изменяют отношение объекта, следовательно, они изменяют имя текущего города, представленного отношением (которое затем «передается» другим друзьям указывая на ту же сущность города).

Если вы посмотрите на доступные привязки для NSPopupButton, вы увидите разницу. Возможно, вы захотите использовать NSPopupButton (Cell) для назначения городов друзьям, с каким-то «сторонним» редактором на основе NSTableView для управления названиями городов, что на самом деле является двумя разными задачами.

...