Objective c 如何观察NSArrayController包含的项的更改
我有一个对象,其中包含一个名为Objective c 如何观察NSArrayController包含的项的更改,objective-c,arrays,cocoa,nsarraycontroller,key-value-observing,Objective C,Arrays,Cocoa,Nsarraycontroller,Key Value Observing,我有一个对象,其中包含一个名为pointValue的NSMutableArray,还有几个方法,包括setPointValue。当调用后一种方法时,它会触发另一种方法saveTable,该方法将pointValue保存到一个文件中(它是一个csv,但在这里并不重要,因为保存方法起作用)。 我现在有了一个nib文件,其中包含一个NSTableView和NSArrayController,它连接到对象中的数组。 按下nib中的一个按钮,它会触发NSArrayController删除:方法,删除所选项
pointValue
的NSMutableArray
,还有几个方法,包括setPointValue
。当调用后一种方法时,它会触发另一种方法saveTable
,该方法将pointValue
保存到一个文件中(它是一个csv,但在这里并不重要,因为保存方法起作用)。
我现在有了一个nib文件,其中包含一个NSTableView
和NSArrayController
,它连接到对象中的数组。
按下nib中的一个按钮,它会触发NSArrayController
删除:
方法,删除所选项目,访问保存新阵列的设置点值
这一切都很完美,当我手动编辑表格中的单元格并按enter键时,问题就开始了,数组被更改,但未触发setPointValue
,因此数组不会保存到文件中
我绝对被上帝打了一巴掌,为什么设定值没有被激活。是否必须将数组控件或表列绑定到某个对象?您的NSArrayController只观察其内容数组。您希望观察该数组中对象的值,这是不同的
我强烈建议您阅读和上的所有文档
您将看到,当项目添加到设置点值数组中时,您需要观察它们,当它们被删除时,您需要停止观察它们。您可以通过创建设置点值并设置或删除其中添加和删除的项目来实现这一点。您还需要对观察到的项目做出反应,以触发保存方法
索斯伯恩是正确的——这实际上是一个错误。查看OP为自己提供的最直接解决方案的公认答案(比我对这个问题的原始答案更好)。没有所谓的NSArrayControl
。你是说NSArrayController
?“控件”与“控制器”非常不同。可能重复:我编辑了您的答案,以包含第四个链接。你能验证一下我添加了正确的一个吗?这是正确的链接,谢谢,但是当我修改我的答案指向dup的答案时,我可能应该删掉这句话。这是处理事情的更好方法。