绑定NSOutlineView的选择索引路径

时间:2011-09-03 12:37:41

标签: objective-c cocoa nstableview cocoa-bindings key-value-observing

我有一个自定义<NSOutlineViewDataSource>,我会NSOutlineView更新selectionIndexPaths属性。我无法让bind:toObject:withKeyPath:options:正确绑定。基本上,我需要我的数据源来知道选择了哪个项目。

当我绑定到selectionIndexes(由NSTableView声明)或selectionIndexPaths(由NSOutlineView声明)时,文档指示我应该能够(除非出于某种原因,仅在IB中可用),我得到一个运行时异常,即大纲视图对于这些密钥中的任何一个都不是“密钥值编码兼容”。

当我绑定到selectedRowIndexes时(后备,因为我需要获取该信息并对其进行反向工程以确定选择了哪个父/子对),它会更新数据源一次,数据源中的NSIndexSet被冻结为其初始值。我也没有手动设置它。此外,我甚至无法在另一个方向绑定selectedRowIndexes,因此数据源可以更新大纲视图的选择。我在大纲视图中得到了相同的“键值编码兼容”异常。

我在我的数据源类中定义了一个@property,带有一个支持ivar,并且我在控制器类中绑定它,引用数据源和大纲视图,在加载数据之后,在-awakeFromNib

2 个答案:

答案 0 :(得分:2)

Dov,您是否考虑过使用针对绑定量身定制的NSTreeController?或者,您可以将控制器设置为大纲视图的委托,以使用方法“-outlineViewSelectionDidChange”接收选择的通知

Source

答案 1 :(得分:1)

我使用大纲视图的委托代替selectionIndexPaths-outlineViewSelectionIsChanging:通知更新模型中的选择,而不是绑定-outlineViewSelectionDidChange:,而{{1}}的行为不可靠。