iOS中的键值观察。更改字典中的错误

时间:2012-05-15 15:25:08

标签: ios ios4 key-value-observing

我订阅了一个对象,以便从另一个对象进行一些更改,如下所示:

[objA addObserver:self
       forKeyPath:keyPath
          options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
      context:nil];

当进行更改时

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

被召唤。

但是更改词典的“新”和“旧”键的值始终相同。此问题仅在iOS 4.x中可重现。在iOS 5.x中它工作正常。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这取决于您正在观察的内容以及该对象的变化方式。值得注意的是,如果对象指针没有改变,而是该对象的某些属性/属性已经改变(例如,你有一个NSMutableArray并且你只是向数组添加一个值,但是NSMutableArray本身的地址没有改变),新旧指针实际上指向同一个对象,因此它看起来会保持不变。在这些情况下,您甚至不会收到更改通知,但即使您手动调用willChangeValueForKeydidChangeValueForKey,例如某些自定义设置器,旧值也会显示为与新值相同。如果您将更改值的代码更改为实际创建对象的新副本并释放旧副本,那么您将看到新旧值发生变化。

确保您的对象也是KVO Compliant

如果您需要更多帮助,则必须提供有关您正在更改的对象以及更改方式的更多细节(特别是源代码)。