iphone - 为什么我在不同上下文中的对象之间得到 : Illegal attempt to establish a relationship . ..

标签 iphone core-data

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

不过我已经修改了托管对象存储。

我想将某些字段添加到每个托管对象中。将它们一一添加到系统中的每个对象会花费太多时间,因此我决定以编程方式将它们添加到托管对象模型中。在应用程序委托(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/

相关文章:

ios - 在 iOS 9 中,为什么 SFSafariViewController 被推送而不是模态呈现?

iPhone/iPad - 核心动画 - CGAffineTransformMakeTranslation 不修改框架

iphone - 在我的 IOS 应用程序中集成 Tumblr API

ios - Restkit 删除 Coredata 中没有出现在 JSON 中的对象

cocoa - 核心数据损坏的多线程

iphone - 错误 : "No devices registered in member center" - Invalid UDID?

iphone - 将 WordPress 博客集成到 iphone 应用程序

ios - 你能在上下文的 performBlock 之外使用 NSManagedObject 吗?

core-data - 如何查找并删除在 Core Data/Cloud Kit 应用程序中创建 CDMR 同步请求的内容?

ios - 核心数据 : NSFetchedResultsController sorting by date vs. 有序对多关系