一個類具有NSMutableArray類型的屬性(和實例var)以及合成訪問器(通過@property
)。如果您在使用觀察此陣:觀察用於插入/刪除的NSMutableArray
[myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL];
然後像這樣的數組中插入的對象:
[myObj.theArray addObject:NSString.string];
的observeValueForKeyPath ...通知發送不。但是,下列情況發送適當的通知:
[[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string];
這是因爲mutableArrayValueForKey
返回一個代理對象,需要通知觀察員的照顧。
但是不應該合成訪問器自動返回這樣的代理對象嗎?什麼是解決這個正確的方法 - 我應該寫,只是調用[super mutableArrayValueForKey...]
自定義訪問?
偉大的建議,謝謝。 – 2008-11-20 04:39:06
#1的問題是,當你添加觀察者時,你正在觀察某個對象的屬性。數組是該屬性的*值*,而不是屬性本身。這就是爲什麼你需要使用訪問器或-mutableArrayValueForKey:來修改數組。 – 2008-11-20 06:45:54
您的最後一點似乎已經過時 - 我在NSArray屬性上獲得免費的KVO通知,前提是我實現了添加和刪除訪問器。 – Bryan 2015-03-20 23:22:03