保存从JSON到Core Data的多对一关系

时间:2010-06-03 13:42:19

标签: iphone core-data

我想要将从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”是一种核心数据生成的访问器方法 成分和食谱之间存在多对一的关系

  1. 但是,当我运行此操作时,我收到以下错误: NSCFDictionary managedObjectContext]:无法识别的选择器发送到实例

  2. 如果我删除最后一行(即[recipe setIngredients:ingredientsSet];) 然后,看看SQLite数据库,我看到食谱和配料已经存储但配方和配料之间没有创建任何关系

  3. 有关如何确保关系的任何建议都存储正确吗?

    <小时/> 更新1:MOC设置如下:
         - (NSManagedObjectContext *)insertionContext {
        if(insertionContext == nil){
            insertionContext = [[NSManagedObjectContext alloc] init];
            [insertionContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
        }
        return insertContext;
        }

    更新2:
    数据模型具有配方(对象类:配方)与成分(对象类:成分)的多对多关系。见:

    http://i50.tinypic.com/10x98p4.jpg

    如果,而不是:
        [recipe setIngredients:ingredientsSet]; 我尝试在for循环期间单独设置成分 - 例如使用:
    recipe.ingredients = thisIngredient;
    我收到错误消息:“警告:不兼容的Objective-C类型'struct NSDictionary *',当从不同的Objective-C类型传递'setIngredients:'的参数1时,预期'struct NSSet *'”

1 个答案:

答案 0 :(得分:0)

这里的问题是如何获取未显示的托管对象上下文...它表示您正在调用字典上的managedObjectContext访问器或方法,因此出现错误,发布如何检索托管对象上下文,检查你调用该方法的对象,它似乎不是你想要调用它的对象...