如何重新获取 NSManagedContext 中存在的对象
How to refetch object existing in NSManagedContext
我使用 NSManagedObject
实例创建了 UIViewController
,我们称它为 A
。 A
已从 mainContext
中提取。
在项目的其他部分,某种进程已使用 backgroundContext
更新了 NSPersistedContainer
。在此更新期间 A
更改了状态。
从第一段更新 UIViewController
的最佳方法是什么。如何重新获取 A
以更新 mainContext
中现有的 NSManagedObject
?
使用 NSFetchRequest 获取,谓词是 objectID! :)
该 ID 在现有(已保存)对象的上下文中有效
处理将一个上下文所做的更改合并到另一个上下文的正确方法是:
- 为
NSManagedObjectContextDidSave
通知添加一个观察者。
- 发布此通知后,使用
mergeChanges(fromContextDidSave notification: Notification)
从保存操作中所做的更改更新您的上下文。您只需传递 Notification
即可进行合并,并且您的对象将被刷新。
另一种方法是对您的对象使用 refresh(_ object: NSManagedObject, mergeChanges flag: Bool)
。为第二个参数传递 true
以合并来自持久存储的更改。这可能不太好,因为它只影响单个对象而不是上下文中的所有对象,但在某些情况下它很有用。
我使用 NSManagedObject
实例创建了 UIViewController
,我们称它为 A
。 A
已从 mainContext
中提取。
在项目的其他部分,某种进程已使用 backgroundContext
更新了 NSPersistedContainer
。在此更新期间 A
更改了状态。
从第一段更新 UIViewController
的最佳方法是什么。如何重新获取 A
以更新 mainContext
中现有的 NSManagedObject
?
使用 NSFetchRequest 获取,谓词是 objectID! :)
该 ID 在现有(已保存)对象的上下文中有效
处理将一个上下文所做的更改合并到另一个上下文的正确方法是:
- 为
NSManagedObjectContextDidSave
通知添加一个观察者。 - 发布此通知后,使用
mergeChanges(fromContextDidSave notification: Notification)
从保存操作中所做的更改更新您的上下文。您只需传递Notification
即可进行合并,并且您的对象将被刷新。
另一种方法是对您的对象使用 refresh(_ object: NSManagedObject, mergeChanges flag: Bool)
。为第二个参数传递 true
以合并来自持久存储的更改。这可能不太好,因为它只影响单个对象而不是上下文中的所有对象,但在某些情况下它很有用。