我会稍微简化一下。我是Core Data的新手,我想我在这里缺少技术性。所以,请光临我
我从Web服务导入数据,在这些数据中我有一个类别树。
例如:
餐馆
- 意大利语
- 墨西哥
- 牛排馆
在我的模型中,我设置了一个名为ParentCategory的关系,其关系称为Subcategories。到目前为止一切都很好。
现在,当我导入我的类别时,我正在做这样的事情:(注意:我的代码看起来不像这样。我已经改变它以举例说明我的问题)
NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"Categories" inManagedObjectContext:context];
NSDescription *parentCategory = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context]
//Then I actually set some values for parentCategory.
//Then create the subcategories.
NSDescription *italianDescription = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context];
[italianDescription objectForKey:@"Italian" forKey:@"name"];
//Set the relationship
[italianDescription objectForKey:parentCategory forKey:@"ParentCategory"];
//All this works great but then when
NSEntityDescription *mexicanDescription = [NSEntityDescription insertNewObjectForEntityForName:[categoryEntity name] inManagedObjectContext:context];
[mexicanDescription objectForKey:@"Mexican" forKey:@"name"];
[mexicanDescription objectForKey:parentCategory forKey:@"ParentCategory"];
似乎当最后一行代码运行时,它会从“italianDescription”中删除关系,因此在我保存上下文后,它显示它没有父类别。我从我的Web服务中删除了一些数据,只有我设置与父类别对象X的关系的最后一个子类保留了它。所有以前都会松开它。
我检查了苹果开发人员的文档,但它并没有真正帮助。话虽这么说,我怎么能克服这个?或者用关系导入它的有效方法是什么。
感谢您的时间。
答案 0 :(得分:1)
我认为你没有设置任何东西,为NSManagedObjects设置值的方法是
setValue: forKey:
而不是NSDescription *,你应该使用NSManagedObject *
您可能希望查看子类化实体,因为它允许更容易地访问和设置属性。在这种情况下,它将是
MyCustomEntity* myobj=[NSEntityDescription insertNewObjectForEntityForName:@"MyentityName" inManagedObjectContext:context];
然后,您可以通过使用点符号或消息传递的属性来设置值。您可以通过在核心数据编辑器中选择实体,然后在菜单栏上的编辑器下创建一个NSManagedObject子类,创建后需要告诉实体它现在有一个自定义类。这是在Entity下的右手Utiliies栏中有一个Class字段,只需输入你的新类的名称就可以了。它应该被设置。