无法在NSManagedObjects之间建立关系

时间:2012-11-05 14:39:08

标签: ios core-data nsmanagedobject nsmanagedobjectcontext

我有1个ToDo对象,我正在创建1个Report对象。它们都是NSManagedObject创建的同一NSManagedObjectContext的不同MOC。为了说清楚,NSManagedObjectContext是我的PersistenceStore类的ivar。

ToDo对象来自一个数组,该数组继承自PersistenceStore中的方法,该方法返回带有保存在NsPresistentStoreCoordinator中的对象的数组。 todo对象作为属性传递给我应该初始化报告的类。

使用以下代码行从PersistenceStorage NSManagedObject的MOC初始化报告类:

NSManagedObjectContext *context = [store managedObjectContext];
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context];

Todo和Report对象具有一对一的关系。但我试图设置关系,我得到了错误

  

< \ NSInvalidArgumentException>非法尝试在不同环境中的对象之间建立关系“

在我看来,我使用相同的NSManagedObjectContext。有些人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

查找另一个实体的上下文:

NSManagedObjectContext *context = [store managedObjectContext];

 NSManagedObject *ctx = [context existingObjectWithID:[todo objectID] error:&error];
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:ctx];

答案 1 :(得分:0)

我找到了解决方案。我使用了NeverBe的部分答案。

NSManagedObjectContext *context = [store managedObjectContext]; 
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:context]; 
NSManagedObject *object = [context objectRegisteredForID:[currentTodo objectID]]; 
[report setTodo:((ToDo*) object)];

我没有使用过NeverBe答案的原因是Report对象在同一个上下文中有其他关系。如果我复制Todo对象的上下文,我会遇到与其他关系相同的问题。