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