【问题标题】:Key-Value Observing in iOS. Error in changes dictionaryiOS 中的键值观察。更改字典中的错误
【发布时间】:2012-05-15 15:25:07
【问题描述】:

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

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

【问题讨论】:

    标签: ios ios4 key-value-observing


    【解决方案1】:

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

    确保你的对象也是KVO Compliant

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

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2012-08-25
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多