我有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。有些人可以帮助我吗?
答案 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对象的上下文,我会遇到与其他关系相同的问题。