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