2012-09-01 58 views
0

我有一个也是NSOutlineViewDataSource的自定义NSViewController。我也有一个NSOutlineView作为数据源绑定到我的视图控制器实例的窗口,而NSOutlineView绑定到自定义视图控制器的view:属性。当视图选择发生变化时,自定义NSViewControllerrepresentedObject不会更新

控制器很好地填充大纲视图。但是,视图内的选择不会自动更新控制器的representObject属性。似乎在代表对象中触发更改的唯一情况是,当我调用setRepresentedObject时:直接...这种方式击败了目的。

任何想法为什么这可能是?代表物体应该自动更新,对不对?在此先感谢...

回答

3

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

通常,表格类型视图中各个元素的视图控制器各自都有自己的representedObject,并且此对象不会更改。例如,如果您使用的是NSCollectionView,则视图中的每个元素都由NSCollectionViewItem控制,NSCollectionViewItemNSViewController的子类。每个NSCollectionViewItemrepresentedObject都会告诉它什么数据要呈现在它的小视图中。

NSOutlineView和它的超NSTableView是不同的,因为他们的细胞往往NSCells,而不是完全成熟的NSViews,除非你选择使用它们在Mac OS X 10.7或更新这种方式。即使在这种情况下,您通常也不会有管理每个单元的NSViewController子类。所以视图控制器representedObject模式不会在用户选择的单个元素的级别上使用。如果你想要跟踪NSOutlineView的选择,有很多NSTableView方法可以让你做到这一点。

+0

啊,我明白了 - 谢谢你;这回答了我的问题。 –

相关问题