0

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

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

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

4

1 回答 1

4

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

通常,表格类型视图中各个元素的视图控制器都有自己的representedObject,并且该对象不会更改。例如,如果您NSCollectionView在视图中使用 each 元素NSCollectionViewItemNSViewController. representedObjectfor eachNSCollectionViewItem告诉它要在其小视图中呈现哪些数据。

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

于 2012-09-01T07:45:33.843 回答