2010-12-01 58 views
1

我在后台线程上解析数据,插入新实体并设置与其他现有实体的关系。核心数据:非法尝试建立关系+(null)上下文

有时会出现错误:“尝试在不同的上下文中建立对象之间的关系”。

在阅读了更多关于此之后,我现在在后台线程中创建一个新的ManagedObjectContect并使用它来插入新实体并设置关系。我小心只在后台线程中使用这个新的ManagedObjectContext。当我需要找到一个现有实体来设置现有对象与这些新对象之一之间的关系时,我会调用[moc objectWithId:id]来使用我的新moc来获取现有对象。但是,我仍然收到错误。

沮丧,我开始打印出来的东西。我注意到,当我打印出每个NSManagedObject的managedObjectContext属性时,在设置关系之前,我有时会打印出'(null)'。这似乎是问题发生的时候。

谁能告诉我我做错了什么?为什么我有时在我的对象上有(null)moc?

感谢您的帮助!

+0

如果没有包括回溯和代码,则无法诊断此问题。 – 2010-12-01 00:21:37

回答

0

我们需要看到你的一些代码。我的第一个想法是检查你是通过它的属性还是直接访问managedObjectContext?

如果您使用Apple提供的模板核心数据方法,则在创建新的托管对象时,通过属性访问它将确保上下文始终可用(即不为零)。

+0

Rog,为了检查managedObjectContext属性,我简单地记录了[entity managedObjectContext]。这是什么有时返回'(null)'。 – toofah 2010-12-01 05:10:30

+0

如果没有看到您的代码,将无法帮助您,对不起! – Rog 2010-12-01 05:42:54

0

NSmanagedObject有一个名为isInserted的方法,如果没有使用NSManagedObjectContext上的插入方法插入它,这确认是否已经将一个对象插入到managedObjectContext中检查此值。

1

最有可能的解释是,您尝试链接到一个上下文中创建的对象,该对象尚未与其他上下文合并。在上下文合并之前,一个上下文中所做的更改不会显示在另一个上下文中。这就是你的错误信息告诉你的。

Null对象很可能是由使用临时对象ID造成的。在对象已被保存到持久性存储之前,对象ID不会被修复。在此之前它有一个临时ID,当它被保存时它会改变。