非法尝试在不同的上下文中建立对象之间的关系..为什么我会收到此错误?

时间:2012-04-27 17:17:29

标签: iphone objective-c ios xcode core-data

我有这段代码:

Entry *entry = [Entry create];

NSOrderedSet *media = [[NSOrderedSet alloc] init];
entry.media = media;

EntryTableInfo *entryTableInfo = [[EntryTableInfo alloc] init];
entry.entryTableInfo = entryTableInfo;

[[CoreDataStore mainStore] save];

当它保存时,它会给我错误Illegal attempt to establish a relationship between objects in different contexts

NSOrderedSet代码已经存在,并且工作正常。 EntryTableInfo代码不是,那是新的,这就是崩溃的原因,但我不确定为什么?

1 个答案:

答案 0 :(得分:3)

您的EntryEntryTableInfo类似乎是托管对象(NSManagedObject的子类)。

托管对象应仅在托管对象上下文(NSManagedObjectContext对象)内“生存”。特别是它们应该只在这种背景下创造。

您的[Entry create]方法可能会这样做,但[[EntryTableInfo alloc] init]会创建一个没有上下文的托管对象,这是错误的。

尝试查看[Entry create]方法实现代码并以类似方式创建EntryTableInfo实例。