我只有一个托管对象上下文。
不过我已经修改了托管对象存储。
我想将某些字段添加到每个托管对象中。将它们一一添加到系统中的每个对象会花费太多时间,因此我决定以编程方式将它们添加到托管对象模型中。在应用程序委托(delegate)中,我首先执行以下操作:
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
然后我迭代模型中的所有实体并修改它们并为每个实体设置新的属性数组:
for (NSEntityDescription *entity in entities) {
NSAttributeDescription *idAttribute = [[NSAttributeDescription alloc] init];
[idAttribute setName:@"id"];
[idAttribute setAttributeType:NSStringAttributeType];
[idAttribute setOptional:NO];
[idAttribute setIndexed:YES];
等等。
看起来大部分工作正常。当我尝试将对象添加到我创建的新的一对一关系中时,我遇到了问题。我从相同的托管对象上下文创建对象:
self.action = [NSEntityDescription insertNewObjectForEntityForName:@"MobileObjectAction" inManagedObjectContext:managedObjectContext];
self.user = [NSEntityDescription insertNewObjectForEntityForName:@"MobileUser" inManagedObjectContext:managedObjectContext];
当我到达时
[user setAction:action];
我得到: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“非法尝试在不同上下文中的对象之间建立关系“操作”...
我做错了什么?
最佳答案
在两个实体相关之前在代码中放置一个断点。确保它们都是 NSManagedObject
的实例。
如果是,请确保它们都设置了 NSManagedObjectContext
并将其设置为相同的指针。
显然,请确保它们都是有效的对象。
上述测试之一很可能被证明是错误的。
关于iphone - 为什么我在不同上下文中的对象之间得到 : Illegal attempt to establish a relationship . ..,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603611/