我有一个 NSManagedObject 实例,它代表我的应用程序中的用户。我保留这个实例并在 View Controller 之间传递它以供接口(interface)引用。用户实例所属的托管对象上下文 (MOC) 是一个主队列 MOC,它是直接保存到持久存储的私有(private)队列 MOC 的子级。
我的核心数据持久存储在单独的后台队列的后台更新。这些更新被保存到私有(private)队列 MOC,然后提交到主私有(private)队列 MOC,随后保存到持久存储。
我的问题是,如何确保用户 NSManagedObject 实例保持最新状态?我知道 refreshObject:mergeChanges: 的存在但是,设置一个 NSManagedObjectContextDidSaveNotification
观察器来简单地保持对象实例最新似乎很复杂。当尝试使多个 NSManagedObject 实例保持最新时,我可以看到这种方法变得不守规矩。
最佳答案
根据经验,您最好的选择是不要尝试使其保持最新。您需要使用实现 NSManagedObjectContextDidSaveNotification 来使您的上下文保持最新——您无法解决这个问题——但要获得有效的对象,您需要在每次执行后重新查询它更新。最简单的方法是依赖于应用程序,但我经常使用唯一的、服务器生成的 ID 来传递对象,然后在我需要使用它们时使用它们从数据库中取出它们。 (唯一 ID 是必需的,因为我通常使用使用它们的 API,因此您的结果会有所不同)该技术可能起作用或可能不起作用的唯一地方是您在本地生成数据的地方,并且还没有(还)将其上传到数据库,从中获取永久 ID。我通常对它们进行特殊处理,并拥有与“真实”ID 分开的设备 ID,只是为了跟踪它们,直到它们获得真实 ID。任何没有“真实”ID 的东西都是我的逻辑意识到需要持久保存到服务器的东西,所以这对我有用。
关于ios - 在保留 NSManagedObject 的同时保持它的最新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19103251/