2011-09-21 46 views
0

我会简化这一点。我是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

请添加到您的问题 - 您的类别实体的定义,以及您的实际代码。 – Perception

回答

1

我不认为你进行任何设置,为NSManagedObjects设定值的方式是相反的

setValue: forKey: 

NSDescription *的,你应该使用NSManagedObject *

你可能想看看转换为实体的子类,因为它可以更容易地访问和设置属性。在这种情况下,它将是

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

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

+0

我正在设置关系。运行后,我的导入信息进入数据库,只有最后一个父类别关系在那里。 据我所知,NSEntityDescription将负责为我创建托管对象。检查 中的第一块代码http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdCreateMOs.html – Ares

+0

@Ares,您的父类别是一对多关系船?如果它是一对一的,那么在最后设置它会替换它的当前值。 – utahwithak

+0

这是一对一的,一个类别只能有一个父类别。由于类别可以有许多子类别,因此反向(子类别)是一对多的。 其实,我只是检查了一下,倒数设置为一对一。 :)这是做到了。谢谢cwieland。有时我们可以忽略一些简单的事情,这很有趣。 – Ares