我是Cocoa编程的新手(但对其他UI框架比较有经验)并且无法确切地告诉我哪里出错了 以下情况。
我有一个由NSOutlineViewDataSource包装的“树”数据。这些项目是非常基本的读/写(想想复选框)。但是,何时
setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
调用,我所做的更改不仅影响有问题的单个项目,而且可以传播到其他项目,即检查一个项目可能导致树中的其他项目选择或取消选择。在数据模型级别,我的工作正常。我的问题是以某种方式迫使大纲刷新,以便在UI中显示这些其他更改。
基本上,当调用setObjectValue时,刷新的单个单元格会被刷新,但我需要(可能)在UI中刷新整个树。
做这样的事情的最佳做法机制是什么? NSOutlineView上是否有一个事件我应该监听然后触发刷新。我的NSOutlineViewDataSource应该引发视图侦听的事件吗?或者我的基本方法是完全错误的?
(我实际上是用Monomac做的,但我认为任何答案都适用于一般的可可)
答案 0 :(得分:1)
安德鲁 - 最简单的方法是研究KVO编程。如果您要观看的特定项目符合KVO,则可以使用“addObserver”在其上设置观察程序然后在观察者类中实现委托函数“observeValueForKeyPath”,并在通知该函数时强制更改UI改变你正在观看的价值。并非所有东西都符合KVO标准,因此您的里程数会根据您希望监控变更的内容而有所不同。但如果您正在观看自定义对象上的属性,那么使用KVO肯定会很好。
KVO编程指南在这里: