它看起來你的問題是與事實keyPathsForValuesAffectingTotal
只提到的keyPath「itemLink」做。
由於這是一對多關係的路徑,因此您可以有效地告訴您的出價對象觀察一組變更。所有這些都是管理對象是否是它的成員。因此,這解釋了爲什麼當您從「itemLink」添加或刪除項目時獲得更新,但僅此。
您不僅對哪些項目是該集合的成員感興趣,還對這些成員的(可變)屬性感興趣 - 在這種情況下爲價格。因此,除上述之外,您還希望「itemLink」的每位成員在所有觀察員通知相關投標對象的「總計」鍵時,「價格」每當它發生變化時都會發生變化。
不幸的是,它不像在您的Bid類中將「itemLink.price」添加爲依賴關鍵路徑那麼簡單,因爲KVO不允許您觀察「通過」多對多關係。
如果您爲Item實體的實例使用NSManagedObject子類,則可以手動添加此功能。在您的Item類中重寫+ automaticallyNotifiesObserversForKey:
以告訴Cocoa您將手動管理「價格」鍵的KVO通知,然後實施您自己的setPrice:
發送適當通知的方法。這樣的事情:
- (void)setPrice:(id)inPrice
{
// bid = inverse relationship of itemLink
[[self valueForKey:@"bid"] willChangeValueForKey:@"total"];
[self willChangeValueForKey:@"price"];
[self setPrimitiveValue:inPrice forKey:@"price"];
[self didChangeValueForKey:@"price"];
[[self valueForKey:@"bid"] didChangeValueForKey:@"total"];
}