如何观察NSArrayController包含的项目的更改

时间:2011-02-16 00:48:27

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

我有一个包含名为NSMutableArray的{​​{1}}的对象和包含pointValue的多种方法。当调用后一个方法时,它会触发另一个方法setPointValue,它将saveTable保存到一个文件(它的csv,但在此处并不重要,因为保存方法有效)。 我现在有nib文件,其中包含pointValueNSTableView,它连接到对象中的数组。 按下笔尖中的按钮会触发NSArrayController NSArrayController方法,删除所选项目,访问保存新阵列的remove:

这一切都很完美,当我手动编辑表格中的单元格并按回车键时,我的问题就开始了,数组已更改,但未触发setPointValue,因此数组未保存到文件中。

我绝对不知道为什么setPointValue不被唤起。我是否必须将数组控件或表列绑定到某些东西?

1 个答案:

答案 0 :(得分:2)

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

我强烈建议您阅读Key-Value ObservingCocoa Bindings上的所有文档。

您将看到在将项目添加到setPointValue数组时需要观察它们,并在删除它们时停止观察它们。您可以通过为setPointValue创建indexed collection accessor methods并设置或拆除观察其中添加和删除的项目来执行此操作。您还需要对receiving notification of the changes对您观察到的项目作出反应,以触发您的保存方法。

索伯恩是正确的 - 这实际上是duplicate of this question。请参阅OP为自己提供的最直接解决方案的答案(比我对此问题的原始答案更好)。