ios - 在保留 NSManagedObject 的同时保持它的最新状态

标签 ios core-data nsmanagedobject nsmanagedobjectcontext

我有一个 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/

相关文章:

objective-c - 延迟applicationDidEnterBackground截屏

iphone - 如何在 UITableView 中显示 Core Data 实体

ios - 在核心数据中使用类和点表示法访问是否会获得可变集?

ios - 有没有办法部署已经预先填充Core Data数据库的iOS应用?

iphone - 在退出和检索之前保存最后一个 NSManagedObject - 核心数据

swift - 核心数据 : Converting a String into an NSManagedObject instance

ios - 由于 NodeJs 服务器,我的 iOS 聊天应用程序会被应用程序商店拒绝吗?

ios - Ionic & ios 如何制作固定的顶部栏按钮和可滚动列表

ios - NSString - 如何获取由花括号包围的字符串的一部分

ios - NSManagedObject 的单元测试 [GHUnit]