从一个上下文到另一个上下文使用 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 的上下文传递到另一个线程/线程池?