它看起来你的问题是与事实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"];
}