objective-c - 如何观察 NSArrayController 包含的项目的变化

标签 objective-c arrays cocoa nsarraycontroller key-value-observing

我有一个对象包含一个名为 pointValueNSMutableArray 和包括 setPointValue 在内的几个方法。当调用后一个方法时,它会触发另一个方法 saveTablepointValue 保存到一个文件中(它是一个 csv,但在这里并不重要,因为保存方法有效)。 我现在有一个包含 NSTableViewNSArrayController 的 nib 文件,它连接到对象中的数组。 按下 Nib 中的按钮会触发 NSArrayController remove: 方法,删除所选项目,访问保存新数组的 setPointValue .

这一切都完美无缺,当我手动编辑表格中的单元格并按回车键时,我的问题就开始了,数组发生了变化,但 setPointValue 没有被触发,因此数组没有保存到文件中。

我对为什么没有调用 setPointValue 感到非常震惊。我是否必须将数组控件或表格列绑定(bind)到某些东西?

最佳答案

您的 NSArrayController 仅观察其内容数组。您想要观察 该数组中对象的值,这不是一回事。

我强烈建议您阅读关于 Key-Value Observing 的所有文档和 Cocoa Bindings .

您会发现,当项目被添加到您的 setPointValue 数组中时,您需要观察它们,并在它们被移除时停止观察它们。您可以通过创建 indexed collection accessor methods 来做到这一点为您的 setPointValue 设置或拆除观察其中添加和删除的项目。您还需要对 receiving notification of the changes 使用react到您观察到的项目以触发您的保存方法。

Sosborn 是正确的 - 这实际上是一个 duplicate of this question .查看 OP 为最直接的解决方案提供的已接受答案(比我对这个问题的原始答案更好)。

关于objective-c - 如何观察 NSArrayController 包含的项目的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011315/

相关文章:

cocoa - NSDocument 子类实例显然不在响应者链中

ios - 从 NSData 转换后如何使用 RNCryptor 解密 nsstring

ios - 所有 ViewController 中的 AdMod 单个实例

ios - 更改 UIImageview 形状矩形的默认形状

ios - NSTimer 无法在 NSThread 函数中启动或运行?

xcode - 如何在 cocoa 中制作分割窗口?

iOS AVAudioPlayer 奇怪的行为

javascript - 当元素相等时,Array.sort() 会产生意想不到的结果吗?

php - 搜索数组中的多个值

arrays - 使用 Javascript/Node JS 从数组中删除单引号