我有一个自定义的NSViewController,它也是一个NSOutlineViewDataSource。我还有一个窗口,其中NSOutlineView绑定到我的视图控制器实例作为数据源,NSOutlineView绑定到自定义视图控制器的view:property。
控制器可以很好地填充轮廓视图。但是,视图中的选择不会自动更新控制器的representObject属性。似乎唯一触发了表示对象的变化的是当我直接调用setRepresentedObject时:哪种方式会破坏目的。
知道为什么会这样吗? representObject 应该自动更新,对吗?提前谢谢......
答案 0 :(得分:4)
如果我理解你的问题,你就不明白representedObject
的用途。 representedObject
是模型对象,表示视图控制器正在显示的 all 数据。它不是当前选择的显示内容集合的视图。自定义顶级视图控制器的representedObject
将是NSArray
或其他集合类,其中包含您在视图控制器中显示的数据集。如果正确使用模式,更改自定义顶级视图控制器的representedObject
应该具有替换全新数据集的效果。
通常,表格类型视图中各个元素的视图控制器都有自己的representedObject
,并且此对象不会更改。例如,如果您使用NSCollectionView
,则视图中的每个元素都由NSCollectionViewItem
控制,NSViewController
是representedObject
的子类。每个NSCollectionViewItem
的{{1}}告诉它在其小视图中显示哪些数据。
NSOutlineView
及其超类NSTableView
的不同之处在于,除非您选择在Mac OS X中以这种方式使用它们,否则它们的单元格通常为NSCells
而不是完全成熟的NSViews
10.7或更新。即使在这种情况下,您通常也没有NSViewController
子类来管理每个单元格。因此,视图控制器representedObject
模式不会在用户选择的单个元素的级别上使用。如果您想要跟踪NSOutlineView
的选择,可以使用许多NSTableView
方法来执行此操作。