设置重用相同对象的核心数据关系会删除先前的关系

时间:2011-09-21 13:45:11

标签: objective-c ios core-data core-data-migration

我会稍微简化一下。我是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的关系的最后一个子类保留了它。所有以前都会松开它。

我检查了苹果开发人员的文档,但它并没有真正帮助。话虽这么说,我怎么能克服这个?或者用关系导入它的有效方法是什么。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我认为你没有设置任何东西,为NSManagedObjects设置值的方法是

setValue: forKey:

而不是NSDescription *,你应该使用NSManagedObject *

您可能希望查看子类化实体,因为它允许更容易地访问和设置属性。在这种情况下,它将是

MyCustomEntity* myobj=[NSEntityDescription insertNewObjectForEntityForName:@"MyentityName" inManagedObjectContext:context];

然后,您可以通过使用点符号或消息传递的属性来设置值。您可以通过在核心数据编辑器中选择实体,然后在菜单栏上的编辑器下创建一个NSManagedObject子类,创建后需要告诉实体它现在有一个自定义类。这是在Entity下的右手Utiliies栏中有一个Class字段,只需输入你的新类的名称就可以了。它应该被设置。