2011-02-23 31 views
1

我有一个实体(Order)与实体Item有多对多的关系,它与实体注有多对多的关系。如果价格更改为备注或添加了备注,则关联订单的'价格'属性必须更新。核心数据建模问题(如何根据关系的关系更新属性?)

现在,我的解决方案是让所有Order对象注册NSManagedObjectContextDidChange通知,并检查所有插入/更改的对象,以查看这些对象中的任何一个是否是订单项目的注释之一。但是,这样做效率低下,而且很不方便,导致可以优化的几个性能问题,但我开始意识到我的解决方案是有问题的,不一定是问题。

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

编辑:为了回答Rog带来的问题:我正在寻找将更改传播到模型数据,这些数据由视图控制器通过KVO观察到。我注意到的问题是,如果与某个项目相关的Note的价格被调整,则无法在Core Data中对此进行说明。如果我在物品上使用keyPathsForAffectingPrice,并返回“注释”,那么只会考虑是否插入/删除了注释,而不是在调整注释价格时。

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

回答

2

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

您目前使用的是fetchedResultsController吗?

我看到它的方式,如果您的订单包含项目并且项目包含注释,则对您的“子”属性的任何更新将立即生效(假设您已正确设置反向关系)。

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

+0

问题修改,以满足您的问题 - 有一个FRC。 – refulgentis 2011-02-28 23:24:18