我有一个NSManagedObject实例,代表我的应用程序中的用户。我保留此实例并在视图控制器之间传递它以供引用的接口。用户实例所属的托管对象上下文(MOC)是主队列MOC,它是直接保存到持久存储的专用队列MOC的子代。
我的核心数据持久性存储在后台更新在单独的后台队列中。这些更新将保存到专用队列MOC,然后将其提交到主专用队列MOC,然后保存到持久存储中。
我的问题是,如何确保用户NSManagedObject实例保持最新?我知道refreshObject:mergeChanges:的存在,然而,设置一个NSManagedObjectContextDidSaveNotification
观察者来简单地保持对象实例是最新的似乎很复杂。在尝试使多个NSManagedObject实例保持最新时,我可以看到这种方法变得不守规矩。
答案 0 :(得分:1)
根据经验,您最好的选择是不要试图让它保持最新。你需要使用实现NSManagedObjectContextDidSaveNotification来保持你的上下文最新 - 你无法解决这个问题 - 但是为了得到一个有效的对象,你需要在每次之后重新查询它更新。最简单的方法是依赖于应用程序,但我经常使用唯一的,服务器生成的ID来传递对象,然后在需要使用时将它们从数据库中取出。 (唯一的ID是必要的,因为我通常使用的是使用它们的API,因此您的结果会有所不同)这种技术可能或可能不起作用的唯一地方是您在本地生成数据但尚未生成数据的地方)将其上传到数据库,获取它的永久ID。我通常特别注意那些并且具有与“真实”ID分开的设备ID,只是为了跟踪它们直到它们获得它们的真实ID。任何没有“真实”ID的东西都是我的逻辑所知道的东西需要持久保存到服务器,这对我有用。