核心数据 - 具有多对多关系的实体正在检索除“关系”实体

时间:2015-11-19 01:06:29

标签: core-data relationships

我有两个实体,一个叫做“食谱”,另一个叫“成分”。两者之间存在一对多的关系(“recipeIngredients”)。我的问题是当我尝试从提取的配方对象中检索成分时,我得到了nil。检索所有其他Recipe对象的属性就好了。

我所知道的:

  • 我按照code.tutsplus.com上的核心数据教程中的说明设置了数据模型。真的很容易建立一对多的关系;我不认为我搞砸了,但总有机会。配方与配料的关系是“recipeIngredients”。
  • 通过调试确认配料已正确初始化,因为我看到它们的指针地址。这些成分保存到NSSet,我使用setValue:forKey:方法保存到Recipe对象。保存时没有错误。

这是我保存的代码:

NSSet *ingredients = [NSSet setWithObjects:newIngRecipe1, newIng2Recipe1, newIng3Recipe1, newIng4Recipe1, newIng5Recipe1, nil];
[newRecipe1 setValue:ingredients forKey:@"recipeIngredients"];

这是我的检索代码:

Recipe *selectedRecipe = (Recipe *)[self.fetchedResultsController objectAtIndexPath:indexPath];
NSSet *selectedRecipeIngredients = selectedRecipe.recipeIngredients;

我不反对为Recipe对象保存其他成分的其他方法的建议。我可以为食谱制作一个属性来保存一系列成分以使事情变得更容易,但从我的研究来看,似乎正确的方法是使用关系。如果还有其他更“适当”的方法,我很乐意尝试。

1 个答案:

答案 0 :(得分:0)

它一定是Stack Overflow魔法,但在我查看了Apple自己的Recipe应用程序示例后,我最终解决了自己的问题,我在这里得到了Apple's iPhone Core Data Recipe app example。我推荐给任何使用Core Data的人。我注意到示例Recipe应用程序具有用于将配料设置到配方的访问器方法,而我没有,并且应该自动生成这些访问器方法。我重新生成了NSManagedObject子类,而BOOM,有一些存取方法可以在Recipe类中添加配方成分。使用这些方法可以正确保存配料,我现在可以检索它们。我没有必要按照我的方式进行任何改变。

我不知道为什么自动生成的子类首先没有那些方法,但我想答案是确保方法在那里,如果没有,再次自动生成。

相关问题