从一个上下文到另一个上下文使用 NSManagedObjectID 是不是安全?

Posted

技术标签:

【中文标题】从一个上下文到另一个上下文使用 NSManagedObjectID 是不是安全?【英文标题】:Is it safe to use the NSManagedObjectID from one context to the other?从一个上下文到另一个上下文使用 NSManagedObjectID 是否安全? 【发布时间】:2013-10-02 01:30:49 【问题描述】:

我有 2 个 NSManagedObjectContext:

    上下文A 上下文B

在 ContextA 中,我设法获取了实体的 NSManagedObjectID。然后我使用这个对象 ID 来获取 ContextB 中的 NSManagedObject。这工作正常,但我想知道这是否安全。或者,如果您有更好、更安全的方法来做到这一点,请告诉我。

谢谢。

【问题讨论】:

【参考方案1】:

如果isTemporaryID 在 ContextA 中返回 NO,则这是安全的。否则,保存临时对象时,会创建一个新 ID,您可能在 ContextB 中找不到它。

如果 ContextA 和 ContextB 是在不同的线程上创建的,并且您想在两者中访问相同的对象,则需要您执行此操作。

【讨论】:

上下文是否创建在不同的线程上并不重要。每个上下文都有自己的 NSManagedObject 实例。 这个答案并不真正涉及它们是否是线程安全的问题。此外,上下文共享的持久存储协调器将处理临时 ID 问题。【参考方案2】:

这是安全的。文档一直明确表示您应该跨上下文使用 objectID。

【讨论】:

以上是关于从一个上下文到另一个上下文使用 NSManagedObjectID 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

NSManaged Object Context 无法删除对象

如何将 traceId 从 gRPC 的上下文传递到另一个线程/线程池?

如何将未保存的 NSManagedObjectContext 更改从一个上下文合并到另一个上下文?

在后台线程中将核心数据从一个数据库复制到另一个数据库

将烧瓶请求/应用程序上下文复制到另一个进程

将绑定到 FBO 的纹理复制到另一个 OpenGL 上下文