当视图选择更改时,自定义NSViewController representObject不会更新

时间:2012-09-01 04:12:28

标签: cocoa binding nsoutlineview nstreecontroller

我有一个自定义的NSViewController,它也是一个NSOutlineViewDataSource。我还有一个窗口,其中NSOutlineView绑定到我的视图控制器实例作为数据源,NSOutlineView绑定到自定义视图控制器的view:property。

控制器可以很好地填充轮廓视图。但是,视图中的选择不会自动更新控制器的representObject属性。似乎唯一触发了表示对象的变化的是当我直接调用setRepresentedObject时:哪种方式会破坏目的。

知道为什么会这样吗? representObject 应该自动更新,对吗?提前谢谢......

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你就不明白representedObject的用途。 representedObject是模型对象,表示视图控制器正在显示的 all 数据。它不是当前选择的显示内容集合的视图。自定义顶级视图控制器的representedObject将是NSArray或其他集合类,其中包含您在视图控制器中显示的数据集。如果正确使用模式,更改自定义顶级视图控制器的representedObject应该具有替换全新数据集的效果。

通常,表格类型视图中各个元素的视图控制器都有自己的representedObject,并且此对象不会更改。例如,如果您使用NSCollectionView,则视图中的每个元素都由NSCollectionViewItem控制,NSViewControllerrepresentedObject的子类。每个NSCollectionViewItem的{​​{1}}告诉它在其小视图中显示哪些数据。

NSOutlineView及其超类NSTableView的不同之处在于,除非您选择在Mac OS X中以这种方式使用它们,否则它们的单元格通常为NSCells而不是完全成熟的NSViews 10.7或更新。即使在这种情况下,您通常也没有NSViewController子类来管理每个单元格。因此,视图控制器representedObject模式不会在用户选择的单个元素的级别上使用。如果您想要跟踪NSOutlineView的选择,可以使用许多NSTableView方法来执行此操作。