【问题标题】:How to observe changes to the items contained by an NSArrayController如何观察 NSArrayController 包含的项目的变化
【发布时间】:2011-02-16 00:48:27
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

你的 NSArrayController 只是观察它的内容数组。您想观察 in 该数组中的对象的值,这不是一回事。

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

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

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

【讨论】:

  • 我编辑了您的答案以包含第四个链接。请您验证我添加的是否正确?
  • 这是正确的链接,谢谢,但是当我修改我的答案以指向 dup 的答案时,我可能应该把那句话去掉。这是处理事情的更好方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2016-12-08
相关资源
最近更新 更多