1

我有 1 个 ToDo 对象,我正在创建 1 个 Report 对象。它们都是同一个 NSManagedObjectContext 的不同 MOC 的 NSManagedObject 创建。为了清楚起见, 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。有些可以帮助我吗?

4

2 回答 2

1

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

NSManagedObjectContext *context = [store managedObjectContext];

 NSManagedObject *ctx = [context existingObjectWithID:[todo objectID] error:&error];
Report *report = [NSEntityDescription insertNewObjectForEntityForName:@"Report" inManagedObjectContext:ctx];
于 2012-11-05T15:06:42.500 回答
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 对象的上下文,我会在其他关系中遇到同样的问题。

于 2012-11-06T22:52:59.920 回答