Iphone 核心数据:非法尝试建立关系+;(空)上下文

Iphone 核心数据:非法尝试建立关系+;(空)上下文,iphone,core-data,nsmanagedobjectcontext,Iphone,Core Data,Nsmanagedobjectcontext,我正在后台线程上解析数据,插入新实体,并与其他现有实体建立关系 有时我会出错:“试图在不同上下文中建立对象之间的关系” 在阅读了更多相关内容后,我现在在后台线程中创建一个新的ManagedObjectContect,并使用它插入新实体并设置关系。我小心地只在后台线程中使用这个新的ManagedObjectContext。当我需要找到一个现有实体来建立现有对象和其中一个新对象之间的关系时,我调用[moc objectWithId:id]来使用我的新moc获取现有对象。然而,我仍然得到了错误 我很沮

我正在后台线程上解析数据,插入新实体,并与其他现有实体建立关系

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

在阅读了更多相关内容后,我现在在后台线程中创建一个新的ManagedObjectContect,并使用它插入新实体并设置关系。我小心地只在后台线程中使用这个新的ManagedObjectContext。当我需要找到一个现有实体来建立现有对象和其中一个新对象之间的关系时,我调用[moc objectWithId:id]来使用我的新moc获取现有对象。然而,我仍然得到了错误

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

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


谢谢你能给我的帮助

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


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

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


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

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

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

最可能的解释是,您正在尝试链接到在一个上下文中创建的对象,而这些对象尚未与另一个上下文合并。在合并上下文之前,在一个上下文中所做的任何更改都不会显示在另一个上下文中。这就是您的错误消息告诉您的


空对象很可能是由使用临时对象ID引起的。在将对象保存到持久存储区之前,objectID是不固定的。在此之前,它有一个临时ID,保存时该ID将更改

最可能的解释是,您正在尝试链接到在一个上下文中创建的对象,而这些对象尚未与另一个上下文合并。在合并上下文之前,在一个上下文中所做的任何更改都不会显示在另一个上下文中。这就是您的错误消息告诉您的


空对象很可能是由使用临时对象ID引起的。在将对象保存到持久存储区之前,objectID是不固定的。在此之前,它有一个临时ID,保存时该ID将更改

如果没有包含回溯和代码,则无法诊断此问题。如果没有包含回溯和代码,则无法诊断此问题。Jonathan,新实体已插入moc。我试图关联的现有实体已经在持久存储中。您可能需要做的是合并两个对象上下文。调查NSManagedObjectContext的mergeChangesFromContextDidSaveNotification:。同时看看核心数据书示例和marcus zara的核心数据书。我发现后者是应对这种情况的一项值得投资的投资。Jonathan,新实体已插入主运行中心。我试图关联的现有实体已经在持久存储中。您可能需要做的是合并两个对象上下文。调查NSManagedObjectContext的mergeChangesFromContextDidSaveNotification:。同时看看核心数据书示例和marcus zara的核心数据书。我发现后者是处理这种情况的一项值得投资的投资。Rog,要检查managedObjectContext属性,我只需记录[entity managedObjectContext]。这就是有时返回“(null)”的内容。如果看不到您的代码,将无法帮助您,抱歉!Rog,要检查managedObjectContext属性,我只需记录[entity managedObjectContext]。这就是有时返回“(null)”的内容。如果看不到您的代码,将无法帮助您,抱歉!