为什么我会得到:在不同环境中的对象之间建立关系的非法尝试

Mik*_*ike 3 iphone core-data

我只有一个托管对象上下文.

我已经修改了托管对象库.

我想在每个托管对象中添加某些字段.将它们一个一个地添加到系统中的每个对象都需要花费太多时间,因此我决定以编程方式将它们添加到托管对象模型中.在应用程序委托中,我首先做:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
Run Code Online (Sandbox Code Playgroud)

然后我遍历模型中的所有实体并修改它们并为每个实体设置新的属性数组:

for (NSEntityDescription *entity in entities) {
    NSAttributeDescription *idAttribute = [[NSAttributeDescription alloc] init];
    [idAttribute setName:@"id"];
    [idAttribute setAttributeType:NSStringAttributeType];
    [idAttribute setOptional:NO];
    [idAttribute setIndexed:YES];
Run Code Online (Sandbox Code Playgroud)

等等.

它似乎工作得很好.当我尝试将对象添加到我创建的新的一对一关系时,我遇到了问题.我从同一个托管对象上下文创建对象:

 self.action = [NSEntityDescription insertNewObjectForEntityForName:@"MobileObjectAction" inManagedObjectContext:managedObjectContext];
 self.user = [NSEntityDescription insertNewObjectForEntityForName:@"MobileUser" inManagedObjectContext:managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

当我到达

 [user setAction:action];
Run Code Online (Sandbox Code Playgroud)

我得到:由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'非法尝试在不同上下文中的对象之间建立关系'动作'...

我究竟做错了什么?

Mar*_*rra 10

在两个实体相关之前,在代码中放置一个断点.确保它们都是NSManagedObject.

如果是,请确保它们都有自己的NSManagedObjectContext设置并将其设置为相同的指针.

显然,确保它们都是有效的对象.

很可能上述测试之一将被证明是错误的.