观察一对多关系中的从属键
|
我有一个核心数据实体\“ bid \”,它与许多\“ item \”有关系,称为\“ itemLink \”。
在IB中,我有一个文本字段绑定到“总计”,并且几乎可以正常工作。
在“ bid.m”中,我有:
- (NSDecimalNumber *)total
{
return [self valueForKeyPath:@\"itemLink.@sum.price\"];
}
我也有:
+ (NSSet *)keyPathsForValuesAffectingTotal {
return [NSSet setWithObjects:@\"itemLink\", nil];
}
添加或删除项目时,\“ total \”会按预期更新。但是,如果您在itemLink集中更改一个\“ item \”,则不会刷新总数。如何获取KVO来查看链接的NSSet中的相关对象何时发生了变化?
谢谢
没有找到相关结果
已邀请:
2 个回复
扑北爱
仅提及keyPath \“ itemLink \”有关。 由于这是一对多关系的路径,因此您实际上是在告诉出价对象观察一组变化。集合所做的只是管理对象是否是其成员。因此,这说明了为什么在\“ itemLink \”中添加或删除项目时会得到更新,但仅此而已。 不过,您不仅对集合中的哪些项目感兴趣,还对这些成员的(可变)属性感兴趣-在这种情况下为价格。因此,除了上述内容之外,您还希望\“ itemLink \”的每个成员都将相关出价对象的\“ total \”键的所有通知者随时通知\“ price \”已更改。 不幸的是,这并不像在Bid类中添加“ itemLink.price”作为从属键路径那样简单,因为KVO不允许您观察“通过”多对多关系。 如果将NSManagedObject子类用于Item实体的实例,则可以手动添加此功能。在Item类中覆盖
,以告知Cocoa您将要为\“ price \”键手动管理KVO通知,然后实现自己的
方法来发送适当的通知。像这样:
锯康