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

问题描述:

我有一个NSArrayController,我使用KVO来观察它的选择方法的旧/新值。是否可以使用KVO访问代理对象的前一个/当前值?

这很好地工作(触发选择更改时,通常),除了在更改词典中的项目都是空的而不是旧的/新的选定的对象。 [arrayController选择]仍然返回适当的对象,但我希望能够访问以前选择的对象,如果可能的话(我的解决方法可能是观察选定的索引,而不是看看是否有效)。

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

那么,这是预期的行为,还是一些奇怪的事情呢?

编辑:我试着只观察索引,但那也没有工作。旧键和新键仍显示为空。

mmalc's Cocoa bindings page说:

变化字典不包含新旧值。这不是你的错,这是由于控制器中的错误。这个错误将不会在可预见的将来得到解决。

对于纯KVO(与绑定相对),请尝试观察selectedObjects属性而不是选择属性。这会给你一个直接的对象数组,而不是Cocoa绑定系统使用的代理对象。我相信旧/新密钥应该准确地反映选择方式的变化。

+0

不幸的是,这是行不通的!我已经尝试了每种可以找到的方法,从selection到selectedObjects到selectedIndex到selectedIndexes等等。它们都返回一个字典,其中包含一个值为1的NSKeyValueChangeKindKey,其他两个键的值均为NSNull。 – 2008-11-11 04:10:22

您是否在addObserver:forKeyPath:options:context:的选项中使用NSKeyValueObservingOptionNewNSKeyValueObservingOptionOld

如果您能向我们展示一些代码,这将有所帮助。