Se ve su problema tiene que ver con el hecho de que sólo se menciona la keyPathsForValuesAffectingTotal
keyPath "itemLink".
Dado que esa es la ruta de una relación a muchos, efectivamente le está diciendo a su objeto de oferta que observe un conjunto de cambios. Todo lo que hace un conjunto es administrar si los objetos son miembros de él o no. Eso explica por qué obtienes actualizaciones cuando se agregan o eliminan elementos de "itemLink", pero solo eso.
No solo le interesan los elementos que son miembros del conjunto, sino que también le interesan las propiedades (variables) de esos miembros, en este caso el precio. Por lo tanto, además de lo anterior, desea que cada miembro de "itemLink" notifique a todos los observadores de la tecla "total" del objeto de oferta relevante que el "precio" ha cambiado cada vez que cambia.
Desafortunadamente, no es tan simple como agregar "itemLink.price" como una ruta clave dependiente en su clase Bid, ya que KVO no le permite observar las relaciones "a través de" a-muchas.
Si usa una subclase NSManagedObject para instancias de su entidad Item, puede agregar esta funcionalidad manualmente. Omita + automaticallyNotifiesObserversForKey:
en su Clase de artículo para indicarle a Cocoa que va a administrar las notificaciones de KVO manualmente para la clave de "precio", luego implemente su propio método setPrice:
que envía la notificación correspondiente. Algo como esto:
- (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"];
}