我订阅了一个对象,以便从另一个对象进行一些更改,如下所示:
[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中它工作正常。有什么建议吗?
答案 0 :(得分:0)
这取决于您正在观察的内容以及该对象的变化方式。值得注意的是,如果对象指针没有改变,而是该对象的某些属性/属性已经改变(例如,你有一个NSMutableArray并且你只是向数组添加一个值,但是NSMutableArray本身的地址没有改变),新旧指针实际上指向同一个对象,因此它看起来会保持不变。在这些情况下,您甚至不会收到更改通知,但即使您手动调用willChangeValueForKey
和didChangeValueForKey
,例如某些自定义设置器,旧值也会显示为与新值相同。如果您将更改值的代码更改为实际创建对象的新副本并释放旧副本,那么您将看到新旧值发生变化。
确保您的对象也是KVO Compliant。
如果您需要更多帮助,则必须提供有关您正在更改的对象以及更改方式的更多细节(特别是源代码)。