【发布时间】:2023-04-06 09:48:01
【问题描述】:
我有两个实体,一个叫做“配方”,另一个叫做“成分”。两者之间存在一对多的关系(“recipeIngredients”)。我的问题是,当我尝试从获取的 Recipe 对象中检索成分时,我得到了 nil。所有其他配方对象的属性都可以很好地检索。
我知道/拥有的:
- 我按照 code.tutsplus.com 上的 Core Data 教程中的说明设置了数据模型。很容易建立一对多的关系;我不认为我搞砸了,但总有机会。从配方到成分的关系是“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;
我不反对为食谱对象保存成分的其他方法的建议。我可以为食谱创建一个属性来保存一系列成分以使事情变得更容易,但根据我的研究,似乎正确的方法是使用关系。如果还有其他更“正确”的方法可以解决,我很乐意尝试。
【问题讨论】:
-
关系是双向的吗?您是否生成了托管对象子类?你在保存上下文吗?你为什么不
setRecpieIngredients:? -
你能提供更多代码吗?我假设您在创建后保存?有什么理由不使用 NSManagedObject 子类?
-
谢谢你们的cmets,伙计们。我最终解决了自己的问题,但是要回答您的问题,是的,这种关系是双向的,并且我确实生成了托管对象子类并保存了上下文。奇怪的是访问器方法不是第一次生成。我重新生成了子类,这次它们弹出了。我现在可以像魅力一样保存和检索成分。