Ответ 1
Это объясняется в Cocoa Bindings Reference для NSPopUpButton, хотя эта ссылка не совсем ясна.
Content
- это контроллер массива, который предоставляет элементы во всплывающей кнопке. Контроллер массива должен быть привязан к массиву. Чтобы определить, как каждый элемент в массиве отображается во всплывающей кнопке, -description
отправляется каждому объекту в массиве.
Вы можете настроить это двумя способами:
-
Если вы хотите, чтобы привязка
Selected Object
предоставляла объект, отличный от элементов массива, управляемых контроллером массива, к которому привязанContent
, вы можете привязатьContent Objects
к другому контроллеру массива. Он также может быть одним и тем же контроллером массива, но с другим путём ключа; -
Если вы хотите, чтобы параметры кнопки всплывающего окна были чем-то иным, чем описание каждого элемента массива, управляемого контроллером массива, к которому привязана
Content
, вы можете привязатьContent Values
к другому контроллеру массива, который управляет массивом, элементы которого содержат всплывающие опции. Он также может быть одним и тем же контроллером массива, но с другим ключом.
Простой пример: предположим, что у вас есть следующий класс:
@interface Customer : NSObject
@property (copy) NSString *name;
@property (copy) NSString *phoneNumber;
@end
и вы havent переопределили метод -description
. В этом случае -description
бесполезен, а свойство name
будет хорошим выбором для всплывающих опций. Youd bind:
-
Content
для контроллера массива, который управляет массивом экземпляровCustomer
, ключ контроллераarrangedObjects
; -
Content Values
к тому же контроллеру массива, к ключу контроллераarrangedObjects
, ключевой путь моделиname
.
Затем вы можете привязать Selected Object
к чему-то другому, например к свойству в делетете приложения или оконном контроллере. Cocoa привязки присваивали бы выбранный экземпляр Customer
этому свойству.
Теперь предположим, что вас не интересует весь объект Customer
, который был выбран, а только его номер телефона. В этом случае вы можете привязать Content Objects
к тому же контроллеру массива, к ключу контроллера arrangedObjects
, к ключевому клику модели phoneNumber
. Когда выбрана опция всплывающего окна, привязки Cocoa будут устанавливать phoneNumber
вместо всего экземпляра Customer
. Итак: если вы не связываете Content Objects
, Selected Object
представляет исходный объект в массиве. Если вы привязываете Content Objects
, то Selected Object
может быть чем-то другим.
Youd привязывает Selected Value
, если вас не интересовали исходные объекты (или объекты контента), но фактические строки, отображаемые во всплывающих опциях в соответствии с привязками Content Values
.
Быстрый рецепт предоставления данных во всплывающую кнопку:
- Привязать
Content
, если у вас есть объекты (а не только строки), которые представляют параметры всплывающего окна; - Привязать
Content Values
, если параметры, показанные пользователю, не могут быть получены черезContent
, отправив-description
в элементы массива; - Привяжите
Content Objects
, если вы хотите, чтобыSelected Object
возвращал что-то отличное от элементов массива изContent
.
Быстрый рецепт для получения текущего выделения во всплывающей кнопке:
- Привязать
Selected Object
, если вы хотите узнать полный объект (либо отContent
, либоContent Objects
), представляющий текущий всплывающий выбор; - Привязать
Selected Value
, если вам нужна только строка, выбранная во всплывающем окне.
И, наконец, youd используйте Selected Tag
, если всплывающие параметры фактически взяты из меню, чьи элементы имеют набор тегов.