gpt4 book ai didi

cocoa - 如何对 NSOutlineViewDataSource 进行更改触发其他项目的刷新

转载 作者:行者123 更新时间:2023-12-03 17:14:47 27 4
gpt4 key购买 nike

我是 Cocoa 编程的新手(但对其他 UI 框架相对有经验),并且无法准确说出我在哪里出错了出现以下情况。

我有一个由 NSOutlineViewDataSource 包装的数据“树”。这些项目是非常基本的读/写(想想复选框)​​。然而,当

setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item

被调用时,我所做的更改不仅会影响相关的单个项目,而且可以传播到其他项目,即检查一个项目可能会导致树中的其他项目选择或取消选择。在数据模型级别,我的工作正常。我的问题是以某种方式强制刷新大纲,以便这些其他更改出现在 UI 中。

所以基本上,当调用 setObjectValue 时,更改的单个单元格会被刷新,但我(可能)需要在 UI 中刷新整个树。

执行此类操作的最佳实践机制是什么? NSOutlineView 上是否有我应该监听的事件,然后触发刷新。我的 NSOutlineViewDataSource 是否应该引发 View 监听的事件?或者我的基本方法完全错误?

(我实际上是用 Monomac 来做这件事,但我认为任何答案都适用于一般 cocoa )

最佳答案

Andrew - 最简单的方法是研究 KVO 编程。如果您想要监视的特定项目符合 KVO,您可以使用“addObserver”在其上设置一个监视程序,然后在观察者类中实现委托(delegate)函数“observeValueForKeyPath”,并且可以在通知该函数时强制更改 UI您正在观看的值发生变化。并非所有内容都符合 KVO 标准,因此您的里程可能会有所不同,具体取决于您想要监视变化的事物的性质。但如果您正在观察自定义对象的属性,那么使用 KVO 肯定没问题。

KVO 编程指南在这里:

https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

关于cocoa - 如何对 NSOutlineViewDataSource 进行更改触发其他项目的刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com