我是 Cocoa 编程的新手(但对其他 UI 框架比较有经验),并且在以下情况下无法准确判断我哪里出错了。
我有一个由 NSOutlineViewDataSource 包装的数据“树”。这些项目是非常基本的读/写(想想复选框)。然而,当
setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
被调用时,我所做的更改不仅会影响有问题的单个项目,而且可以传播到其他项目,即检查一个项目可能会导致树中的其他项目选择或取消选择。在数据模型级别,我可以正常工作。我的问题是以某种方式强制刷新大纲,以便这些其他更改出现在 UI 中。
所以基本上,当调用 setObjectValue 时,被更改的单个单元格被刷新,但我需要(可能)整个树在 UI 中刷新。
做这样的事情的最佳实践机制是什么?NSOutlineView 上是否有我应该监听的事件然后触发刷新。我的 NSOutlineViewDataSource 是否应该引发视图侦听的事件?还是我的基本方法完全错误?
(我实际上是用 Monomac 做的,但我认为任何答案都适用于一般可可)