Как настроить привязки для NSPopUpButton

Я хочу привязать выбор NSPopUpButton к одному из предопределенных значений. Чтобы упростить задачу, представьте себе приложение для блога: у меня будут сущности BlogPostи Category(базовые данные, хотя это не имеет значения) и каждая BlogPost. объект имеет ссылку на один из объектов Категория(через свойство категория).

Я хочу, чтобы пользователь менял категорию с помощью NSPopUpButton, поэтому в моем XIB у меня есть NSArrayController, который содержит все возможные категории, и я привязываю кнопки Content Valuesк:

  • Bind to: CategoriesArrayController
  • Клавиша контроллера: ArrayObjects
  • Ключ модели: title

Это красивое всплывающее окно с заголовками всех категорий. Я также могу привязать Выбранный объектк:

  • Привязать к: blogObjectController(или непосредственно к объекту Блог)
  • Клавиша контроллера: выбор
  • Ключ модели: категория

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

Учитывая приведенные выше привязки, это на самом деле имеет смысл, поэтому моим следующим шагом было изменить привязку значений содержимого всплывающего окна только к аранжированным объектам(без ключа модели), аналогично выбранному объекту. Это работает, и изменение выбора действительно меняет категориюзаписи в блоге на другую. НОон не показывает заголовок категории во всплывающем меню, а вместо этого показывает описаниекатегории (которое в основных данных заканчивается чем-то вроде ( entity: Category; id: .......).

Что тоже имеет смысл, поэтому я ввел пользовательский NSValueTransformer(необратимый).Это исправляет описания элементов во всплывающих окнах. меню, но тогда выбор не работает. Я также пытался использовать преобразователь для привязки выбранного объекта, но это просто полностью отключает мое всплывающее окно (возможно, потребуется обратное преобразование, но это существенно усложнит преобразование).

Am I упущено что-то очевидное - возможно ли добиться этого полностью с помощью привязок, без введения дополнительного кода на уровне контроллера?

Любой вариант приветствуется!

PS: надеюсь, текст выше имеет смысл :)

6
задан Tom 4 June 2012 в 17:01
поделиться