Подтвердить что ты не робот

Какая разница между "Значениями контента" и "Объектами контента",

Я изучаю привязки прямо сейчас и имею NSPopUpButton -

Он представляет мне несколько вариантов привязок при выборе значения - Content, Content Objects, Content Value s, а затем Selected Object, Selected Value, и Selected Tag. Может ли кто-нибудь объяснить разницу между ними?

4b9b3361

Ответ 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, если всплывающие параметры фактически взяты из меню, чьи элементы имеют набор тегов.

Ответ 2

#Object относится к любому объекту, совместимому с KVC. #ObjectValue ссылается на путь ключа, используемый для получения значения от этого объекта.

Итак, для вашей всплывающей привязки ContentObjects будет привязан, скажем, к NSArrayController arrangedObjects. Скажем, это относится к массиву словарей или управляемых объектов. Вы не можете осмысленно представить словарь во всплывающем окне (вы получаете начало вывода description, например <NSCFDictionary... или подобное), поэтому здесь происходит привязка contentValues. Это будет что-то вроде вашего NSArrayController arrangedObjects.name, где name - это ключ от вашего словаря или управляемого объекта.

Надеюсь, это поможет, я сам боролся с тем же понятием, когда начал с привязок.