如何重新获取 NSManagedContext 中存在的对象

How to refetch object existing in NSManagedContext

我使用 NSManagedObject 实例创建了 UIViewController,我们称它为 AA 已从 mainContext 中提取。

在项目的其他部分,某种进程已使用 backgroundContext 更新了 NSPersistedContainer。在此更新期间 A 更改了状态。

从第一段更新 UIViewController 的最佳方法是什么。如何重新获取 A 以更新 mainContext 中现有的 NSManagedObject

使用 NSFetchRequest 获取,谓词是 objectID! :)

该 ID 在现有(已保存)对象的上下文中有效

处理将一个上下文所做的更改合并到另一个上下文的正确方法是:

  1. NSManagedObjectContextDidSave 通知添加一个观察者。
  2. 发布此通知后,使用 mergeChanges(fromContextDidSave notification: Notification) 从保存操作中所做的更改更新您的上下文。您只需传递 Notification 即可进行合并,并且您的对象将被刷新。

另一种方法是对您的对象使用 refresh(_ object: NSManagedObject, mergeChanges flag: Bool)。为第二个参数传递 true 以合并来自持久存储的更改。这可能不太好,因为它只影响单个对象而不是上下文中的所有对象,但在某些情况下它很有用。