Пользовательский представленный объект NSViewController не обновляется при изменении выбора представления

У меня есть собственный NSViewController, который также является NSOutlineViewDataSource. У меня также есть окно с NSOutlineView, привязанным к экземпляру моего контроллера представления в качестве источника данных, и NSOutlineView, привязанным к свойству view: пользовательского контроллера представления.

Контроллер отлично заполняет вид схемы. Однако выборки в представлении не обновляют автоматически свойство visibleObject контроллера. Единственное, что, кажется, вызывает изменение в представленном объекте, это когда я вызываю setRepresentedObject: напрямую... что вроде как противоречит цели.

Любая идея, почему это может быть? Представленный объект должен обновляться автоматически, верно? Заранее спасибо...


person David Stein    schedule 01.09.2012    source источник


Ответы (1)


Если я понимаю ваш вопрос, вы не понимаете, для чего нужен representedObject. representedObject — это объект модели, который представляет все данные, отображаемые контроллером представления. Это не текущий выбор представления, показывающего коллекцию контента. representedObject для вашего пользовательского контроллера представления верхнего уровня будет NSArray или другим классом коллекции, который содержит набор данных, которые вы отображаете в своем контроллере представления. Изменение representedObject для вашего пользовательского контроллера представления верхнего уровня должно привести к замене на совершенно новый набор данных, если шаблон используется правильно.

Обычно контроллеры представления для отдельных элементов в представлении табличного типа имеют свои собственные representedObject, и этот объект не изменяется. Например, если вы использовали NSCollectionView, каждый элемент в представлении управляется NSCollectionViewItem, который является подклассом NSViewController. representedObject для каждого NSCollectionViewItem сообщает ему, какие данные представлять в его маленьком представлении.

NSOutlineView и его суперкласс NSTableView отличаются тем, что их ячейки часто имеют NSCells, а не полноценные NSViews, если вы не решите использовать их таким образом в Mac OS X 10.7 или новее. Даже в этом случае у вас обычно нет подкласса NSViewController, управляющего каждой ячейкой. Таким образом, шаблон контроллера представления representedObject не используется на уровне отдельного элемента, который выберет пользователь. Если вам нужно отслеживать выбор NSOutlineView, существует множество методов NSTableView, позволяющих это сделать.

person torrey.lyons    schedule 01.09.2012