1

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

有时我会收到错误消息:“尝试在不同上下文中建立对象之间的关系”。

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

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

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

谢谢你提供的所有帮助!

4

3 回答 3

1

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

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

于 2010-12-01T20:31:14.517 回答
0

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

于 2010-12-01T00:58:04.087 回答
0

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

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

于 2010-12-01T00:21:54.413 回答