Я пробую немного программирования для 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]]. Полагаю, он находится в массиве выбранных объектов с парами ключ-значение.