-1

我为一个对象订阅了来自另一个对象的一些更改,如下所示:

[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 中它运行良好。有什么建议么?

4

1 回答 1

0

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

确保您的对象也符合 KVO 标准

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

于 2012-05-15T23:06:26.983 回答