在托管对象上下文之间传递对象

Posted

技术标签:

【中文标题】在托管对象上下文之间传递对象【英文标题】:Passing objects between managed object contexts 【发布时间】:2009-07-16 09:19:18 【问题描述】:

我有一个带有 2 个托管对象上下文的 iphone 应用程序。我的一个上下文处理一个选择器,它允许用户添加新记录,然后选择这些新记录之一。一旦选择器被隐藏,该托管对象上下文将被保存并丢弃。

然后我想在我的第二个托管对象上下文中使用这个选定的对象,并将它添加(关联)到另一个对象。这第二个 MOC 的更改可能会被保存或删除。这就是为什么创建第一个 MOC 以允许始终保存在选择器中所做的更改,无论它们是保存还是放弃第二个 MOC 中的更改。

我希望这很清楚!我的问题是,当用户从选择器中选择对象时,该对象位于与需要使用它的位置不同的上下文中。有没有办法在上下文之间传递对象?也许使用对象的 ID(在它被持久化之后)。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您在问题中提到了正确的解决方案。您不能在多个上下文之间传递 NSManagedObjects,但可以传递 NSManagedObjectIDs 并使用它们来查询由该 ID 表示的对象的适当上下文。因此,只需将数据持久化(通过保存:),然后将 ID 传递给其他上下文并使用它来向上下文询问适当的对象。

根据您想要执行的操作,您可能需要安装 mergeChangesFromContextDidSaveNotification: 以便一个上下文中的更改自动反映在另一个上下文中。

【讨论】:

以上是关于在托管对象上下文之间传递对象的主要内容,如果未能解决你的问题,请参考以下文章

使用选项卡控制器传递托管对象上下文

为啥我会得到:非法尝试在不同上下文中的对象之间建立关系...

当每个线程可以处理与其他线程中的数据无关的数据时,是不是可以在线程之间重用一个共享托管对象上下文?

SwiftUI - 将托管对象上下文传递给模型

托管对象上下文未保存到持久存储

为什么托管对象和上下文之间存在弱引用?