Привязка NSPopupButton к NSDictionaryController - PullRequest
5 голосов
/ 24 марта 2009

Я пробую немного программирования для MacOS и испытываю некоторые затруднения с пониманием, как работают привязки с NSPopupButton. Я заинтересован в связывании с NSDictionaryController (я не думаю, что мне нужен промежуточный NSArrayController, но если это лучший способ, я открыт для него).

Я создал объект контроллера, у которого есть свойство 'db', у которого есть свойство 'разновидностей', которое является NSMutableDictionary. Словарь 'видов' имеет идентификаторы для ключей и объекты видов для значений. Видовые объекты имеют свойство описания. В InterfaceBuilder я создал MyController, NSDictionaryController и NSPopupButton. Я хотел бы заполнить всплывающее окно с Species.description. При выборе мне нужен доступ к соответствующему идентификатору.

Я настроил NSDictionaryController для привязки «Словаря контента» к MyController с путем к ключу модели «db.species». С помощью NSPopupButton до сих пор я связывал «Значения содержимого» с NSDictionaryController с ключом контроллера 'layoutObjects' и Путь к ключу модели, установленным в 'value.description'.

Кажется, это работает, заполняя список. Мой главный вопрос - каков наилучший способ связать выбор. В идеале я хотел бы связать выделение с NSDictionaryController, чтобы я мог использовать NSDictionaryController для доступа к выделению. Одна из причин этого заключается в том, что я могу подключить другие элементы управления к NSDictionaryController, чтобы увидеть текущий выбор. Если нет, я должен подключиться к свойству в MyController или что-то? Просто ищу лучшие практики. Мне бы очень хотелось, чтобы через механизмы Interface Builder я мог легко повторно использовать модель и дизайн контроллера в другом приложении с другим представлением.

Обновление с использованием ответа Брайана в качестве руководства:

NSPopupButton: связать содержимое с NSDictionaryController-> managedObjects-> value.description

привязка объектов содержимого к NSDictionaryController-> AgrockedObjects-> key

привязать выбранный индекс к NSDictionaryController-> selectionIndex

bind NSDictionaryController-> db.species

Кажется, все работает. Я могу получить объект из контроллера со значением [[[selectedCobject selectedObjects] lastObject]]. Полагаю, он находится в массиве выбранных объектов с парами ключ-значение.

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

Я никогда не пробовал это с NSDictionaryController, но я думаю, что вы захотите связать contentObjects всплывающего окна с «selectedObjects.key» контроллера dict и привязкой selectedObject с клавишей «выбора» контроллера dict Привязка contentObjects будет указывать идентификаторы как базовые объекты, представленные каждым элементом меню. Затем, когда элемент выбирается во всплывающем окне, привязка selectedObject установит идентификатор, соответствующий этому пункту меню, в качестве выбора dict-контроллера.

2 голосов
/ 25 марта 2009

Я хотел бы заполнить всплывающее окно Species.description. При выборе мне нужен доступ к соответствующему идентификатору.

Привязать content к контроллеру словаря arrangedObjects.value (не включайте description - это сделает за вас всплывающая кнопка) и contentObjects к arrangedObjects.key.

контроллера словаря.

Для получения дополнительной информации см. NSPopUpButton в справочнике по привязкам какао .

(Я заметил, что он описывает content как «экземпляр NSArrayController…». Контроллеры словаря являются контроллерами массива, так что это не должно быть проблемой, но может иметь место привязка к свойству контроллера. .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...