2012-11-05 127 views
1

我有1个待办事项对象,我正在创建1个报告对象。它们都是NSManagedObject创建的同一个NSManagedObjectContext的不同MOC。为了说清楚,NSManagedObjectContext是来自我的PersistenceStore类的ivar。无法建立关系NSManagedObjects

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

报告类是从PersistenceStorage NSManagedObject与此代码线MOC初始化:

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

待办事项和报告的对象有关系之一 - - 之一。但是,一个我尝试设置我得到了错误的关系

< \ NSInvalidArgumentException>非法尝试建立在不同的上下文

在我心目中,我使用相同的NSManagedObjectContext对象之间的关系“待办事项” 。有人可以帮助我吗?另一实体的

回答

1

查找方面:

NSManagedObjectContext *context = [store managedObjectContext]; 

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

你可能是说'ctx'是一个'NSManagedObjectContext'而不是'NSManagedObject'? – lagos

+0

我修好了。我使用你的解决方案的一部分: 报告对象也有其他关系,但与原来的上下文,所以如果我有使用你的解决方案,我得到了与其他关系的问题。然后解决方案是 'NSManagedObjectContext * context = [store managedObjectContext]; Report * report = [NSEntityDescription insertNewObjectForEntityForName:@“Report”inManagedObjectContext:context]; NSManagedObject * object = [context objectRegisteredForID:[currentTodo objectID]]; [report setTodo:((ToDo *)object)]; ' – lagos

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对象的上下文,我会遇到与其余关系相同的问题。