核心数据建模问题(如何根据关系的关系更新属性?)

时间:2011-02-23 19:29:03

标签: ios core-data

我有一个实体(Order)与实体Item具有to-many关系,实体Item与实体Note具有to-many关系。如果注释的价格发生变化,或者添加了注释,则相关订单的“价格”属性必须更新。

现在,我的解决方案是让所有Order对象注册NSManagedObjectContextDidChange通知,并检查所有插入/更改的对象,以查看是否有任何这些对象是Order的Item的注释之一。然而,这是非常低效和hacky,并导致一些可以优化的性能问题,但我开始意识到我的解决方案是错误的,不一定是问题。

那么,最好的方法是什么?

编辑:回答Rog提出的问题:我希望将更改传播到模型数据,视图控制器通过KVO观察到这些更改。我注意到的问题是,如果调整了与项目相关的注释的价格,则无法在Core Data中考虑到这一点。如果我在Item上使用keyPathsForAffectingPrice,并返回“notes”,那只会说明是否插入/删除了注释,而不是如果调整了Note价格。

如果这不是核心数据,我会写一个自己的票据价格访问者,只需说[self.item willChangeValueForKey:@“price”],self.price = x,[self.item didChangeValueForKey:@“价钱”];但这是不可能的,因为我不能在Core Data中做自定义访问器,对吧?

1 个答案:

答案 0 :(得分:2)

我们可能需要有关您的代码的更多详细信息才能提供帮助 - 即您是否在寻找将更改传播到模型数据或UI的方法?

您目前使用的是fetchedResultsController吗?

我看到它的方式,如果您的订单包含Items且Items包含Notes,则对您的“子”属性的任何更新都将立即生效(前提是您正确设置了反向关系)。

然后,如果您正在寻找相应更新UI的方法,那么我们需要知道您当前如何使用Coredata实体获取和填充您的视图。