我想要将从JSON解析的多对一关系保存到Core Data中。 解析JSON并将插入到Core Data中的代码如下所示:
for (NSDictionary *thisRecipe in recipes) {
Recipe *recipe = [NSEntityDescription insertNewObjectForEntityForName:@"Recipe" inManagedObjectContext:insertionContext];
recipe.name = [thisRecipe objectForKey:@"Title"];
NSDictionary *ingredientsForRecipe = [thisRecipe objectForKey:@"Ingredients"];
NSArray *ingredientsArray = [ingredientsForRecipe objectForKey:@"Results"];
for (NSDictionary *thisIngredient in ingredientsArray) {
Ingredient *ingredient = [NSEntityDescription insertNewObjectForEntityForName:@"Ingredient" inManagedObjectContext:insertionContext];
ingredient.name = [thisIngredient objectForKey:@"Name"];
}
}
NSSet *ingredientsSet = [NSSet ingredientsArray];
[recipe setIngredients:ingredientsSet];
注意: “setIngredients”是一种核心数据生成的访问器方法 成分和食谱之间存在多对一的关系
但是,当我运行此操作时,我收到以下错误: NSCFDictionary managedObjectContext]:无法识别的选择器发送到实例
如果我删除最后一行(即[recipe setIngredients:ingredientsSet];) 然后,看看SQLite数据库,我看到食谱和配料已经存储但配方和配料之间没有创建任何关系
有关如何确保关系的任何建议都存储正确吗?
<小时/> 更新1:MOC设置如下:
更新2:
数据模型具有配方(对象类:配方)与成分(对象类:成分)的多对多关系。见:
http://i50.tinypic.com/10x98p4.jpg
如果,而不是:
[recipe setIngredients:ingredientsSet];
我尝试在for循环期间单独设置成分 - 例如使用:
recipe.ingredients = thisIngredient;
我收到错误消息:“警告:不兼容的Objective-C类型'struct NSDictionary *',当从不同的Objective-C类型传递'setIngredients:'的参数1时,预期'struct NSSet *'”
答案 0 :(得分:0)
这里的问题是如何获取未显示的托管对象上下文...它表示您正在调用字典上的managedObjectContext访问器或方法,因此出现错误,发布如何检索托管对象上下文,检查你调用该方法的对象,它似乎不是你想要调用它的对象...