观察一对多关系中的从属键

| 我有一个核心数据实体\“ 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中的相关对象何时发生了变化? 谢谢     
已邀请:
        看来您的问题与
keyPathsForValuesAffectingTotal
仅提及keyPath \“ itemLink \”有关。 由于这是一对多关系的路径,因此您实际上是在告诉出价对象观察一组变化。集合所做的只是管理对象是否是其成员。因此,这说明了为什么在\“ itemLink \”中添加或删除项目时会得到更新,但仅此而已。 不过,您不仅对集合中的哪些项目感兴趣,还对这些成员的(可变)属性感兴趣-在这种情况下为价格。因此,除了上述内容之外,您还希望\“ itemLink \”的每个成员都将相关出价对象的\“ total \”键的所有通知者随时通知\“ price \”已更改。 不幸的是,这并不像在Bid类中添加“ itemLink.price”作为从属键路径那样简单,因为KVO不允许您观察“通过”多对多关系。 如果将NSManagedObject子类用于Item实体的实例,则可以手动添加此功能。在Item类中覆盖
+ automaticallyNotifiesObserversForKey:
,以告知Cocoa您将要为\“ price \”键手动管理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\"];
}
    
        我编写了一些代码来支持跨多关系的依赖键。 https://github.com/macoun/DerivedDependency 它还支持对计算值进行缓存。     

要回复问题请先登录注册