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

控制器会很好地填充轮廓视图。但是,视图中的选择不会自动更新控制器的presentatedObject属性。似乎唯一会触发namedObject更改的是在我直接调用setRepresentedObject:时……这违背了目的。

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

最佳答案

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

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

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

10-07 23:18