我在后台线程上解析数据,插入新实体并与其他现有实体建立关系。
有时我会收到错误:'尝试在不同的上下文中建立对象之间的关系'。
在阅读了更多关于此内容后,我现在在后台线程中创建一个新的ManagedObjectContect,并使用它来插入新实体并设置关系。我小心只在我的后台线程中使用这个新的ManagedObjectContext。当我需要找到一个现有实体来设置现有对象和这些新对象之一之间的关系时,我调用[moc objectWithId:id]来使用我的新moc获取现有对象。但是,我仍然收到错误。
感到沮丧,我开始打印出来。我注意到当我打印出每个NSManagedObject的managedObjectContext属性时,就在设置关系之前,我有时打印出'(null)'。这似乎是问题出现的时候。
谁能告诉我我做错了什么?为什么我的对象上有时会有(null)moc?
感谢您提供任何帮助!
答案 0 :(得分:1)
最可能的解释是,您尝试链接到在一个上下文中创建的对象,这些对象尚未与其他上下文合并。在上下文合并之前,在一个上下文中进行的更改不会显示在另一个上下文中。这就是您的错误消息告诉您的内容。
Null对象很可能是由使用临时objectID引起的。在将对象保存到持久性存储之前,不会修复objectID。在此之前,它有一个临时ID,在保存时会发生变化。
答案 1 :(得分:0)
我们需要查看一些代码。我的第一个想法是检查您是通过其属性还是直接访问managedObjectContext?
通过属性访问它将确保在创建新的托管对象时上下文始终可用(即不是nil),前提是您使用的是Apple提供的模板核心数据方法。
答案 2 :(得分:0)
NSmanagedObject有一个名为isInserted的方法,如果没有使用NSManagedObjectContext上的insert方法插入它,则确认是否已将对象插入到managedObjectContext中检查此值。