2012-05-15 21 views
-1

我簽約的一個對象從另一個對象是這樣一些變化:iOS中的鍵值觀察。在改變錯誤字典

[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

這取決於你正在觀察的內容以及該對象如何改變。值得注意的是,如果對象指針沒有改變,而是對象的某些屬性/屬性發生了變化(例如,你有一個NSMutableArray,並且你只是向數組中添加一個值,但是NSMutableArray本身的地址沒有改變),新的和舊的指針實際上指向相同的對象,所以它看起來不會改變。在這些情況下,您甚至不會收到更改通知,但即使您手動調用willChangeValueForKeydidChangeValueForKey(例如,某個自定義設置器),舊值也會與新值相同。如果您將代碼更改爲實際創建對象的新副本並釋放舊副本,則會看到您的新值和舊值發生更改。

確保你的對象也是KVO Compliant

如果您需要更多幫助,您必須提供更多關於您正在更改的對象的細節(特別是源代碼)以及如何更改它。