2013-02-20 82 views
3

如何使用CoreData中的多对多关系进行操作? 例如:CoreData多对多关系

我有2个实体 - 食谱&成份

CoreData链接他们喜欢食谱< < - >>成分。 现在我需要为配方中的每种配料添加属性“计数”。我该怎么做?

谢谢

+0

那你的意思是“我需要添加属性‘计数’对于每种成分'?这是否意味着您想要添加新的NSAttributeDescription,或只是用新值更新此属性? – 2013-02-20 06:58:03

+0

@MarkKryzhanouski 食谱有3列:姓名,thumbImage,配料成分 已经2列:名称,配方 Recipe.ingredients <<-->> Ingredients.recipe 现在我需要添加列“伯爵”在一些成分(计一些食谱)​​ – Romowski 2013-02-20 08:25:40

回答

5

核心数据为您处理对象图一致性维护。因此,如果您使用SQLite存储,Core Data会自动为您创建用于多对多关系的中间连接表。在你的情况下,你应该明确地创建一个中间(“加入”)实体。中间实体的一个优点是您也可以使用它来添加更多关于 关系的信息,例如“IngredientInfo”实体可能包含“计数”列。所以你模型应该看起来像:食谱< - >> IngredientInfo < < - >成分

如果您发现不清楚的地方,我会更新答案。

更新:访问成分和数量

for (IngredientInfo* ingredientInfo in recipe.ingredientInfos) { 
     Ingredient* ingredient = ingredientInfo.ingredient; 
     NSNumber* count = ingredientInfo.count; 
    } 

还是要快速访问某些配方中的所有成分,使用KVC

NSSet* ingredients = [recipe valueForKeyPath:@"ingredientInfo.ingredient"]; 
+0

我认为它应该是'IngredientInfo <<-->成分',否则你可以使用一种成分只用于单一配方。 – 2013-02-20 08:54:19

+0

@Mark 谢谢!这是我需要的 – Romowski 2013-02-20 09:04:57

+0

@Mark 当我选择一些配方时,我应该如何得到配料和他们的数量? – Romowski 2013-02-20 11:40:11