自定义 NSView控制器表示对象在视图选择更改时不更新



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

控制器可以很好地填充大纲视图。但是,视图中的选择不会自动更新控制器的表示对象属性。似乎唯一触发 rerepresentationObject 更改的是当我调用 setRepresentObject 时:直接...这有点违背了目的。

知道为什么会这样吗? 代表对象应该自动更新,对吧?提前感谢...

如果我

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

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

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

最新更新