NSObjectController и его подклассы возвращают прокси-объект для выбора. Я хотел бы понять, почему они выбрали именно такой дизайн. Документация, похоже, не проливает много света на то, почему это так.
Почему -[выбор NSObjectController] возвращает прокси-объект?
Ответы (2)
Темы программирования Cocoa Bindings это сказать:
Вы можете установить привязки к методу выбора контроллера или методу selectedObjects. Однако следует избегать привязки через массив selectedObjects, например, selectedObjects.name. Вместо этого вы должны использовать selection.name. Точно так же вам следует избегать наблюдения за ключами через массив, возвращаемый selectedObjects. Прокси, возвращаемый выбором, более эффективно управляет изменениями в ключе-значении, наблюдая за изменением выбора.
Я думаю, вы обнаружите, что ваш ответ кроется в этом последнем предложении.
Что бы это ни стоило, [objectController valueForKeyPath:@"selection.self"]
возвращает сам выбранный объект.
Часто вам нужно получить прямой доступ к объектам, выбранным в данный момент контроллером, а не к прокси-объекту, возвращенному выбором. NSObjectController и его подклассы предоставляют метод selectedObjects, позволяющий вам делать именно это. Этот метод возвращает массив, содержащий объекты, выбранные получателем в данный момент. Реализация NSObjectController возвращает массив, содержащий один объект, объект содержимого.