是否可以使用KVO访问代理对象的先前/当前值?

时间:2008-11-11 00:00:22

标签: cocoa key-value-observing

我有一个NSArrayController,我正在使用KVO来观察它的选择方法的旧/新值。

这完美地工作(当选择改变时触发,通常),除了更改字典中的项都是null而不是旧/新选择的对象。 [arrayController选择]仍然返回正确的对象,但是如果可能的话我也希望能够访问先前选择的对象(我的解决方法可能是观察所选的索引,看看是否有效)。

我想出的唯一可能的原因可能是因为NSArrayController是一个代理对象。

这是预期的行为,还是奇怪的事情?

编辑:我尝试仅仅观察索引,但这也不起作用。旧密钥和新密钥仍然显示为空。

3 个答案:

答案 0 :(得分:3)

mmalc's Cocoa bindings page说:

  

更改字典不包含旧值和新值。这不是你的错,而是由于控制器中的错误。在可预见的未来,这个错误将无法修复。

答案 1 :(得分:0)

对于普通KVO(与绑定相对),请尝试观察selectedObjects属性而不是selection属性。这将为您提供一个简单的对象数组,而不是Cocoa绑定系统使用的代理对象。我相信旧/新密钥应该准确地反映出选择方式的变化。

答案 2 :(得分:0)

您是否在NSKeyValueObservingOptionNew的选项中使用NSKeyValueObservingOptionOldaddObserver:forKeyPath:options:context:

如果你能告诉我们一些代码,那将会有所帮助。