2013-09-30 60 views
0

我有一个NSManagedObject实例,它代表我的应用程序中的一个用户。我保留这个实例并在视图控制器之间传递它以便引用该接口。用户实例所属的托管对象上下文(MOC)是主队列MOC,它是直接保存到持久存储的专用队列MOC的子项。让NSManagedObject保持最新状态同时保留它

我的核心数据持久存储在后台更新在单独的背景队列中。这些更新被保存到专用队列MOC中,然后被提交到主专用队列MOC,并随后保存到持久存储中。

我的问题是,我怎么能确保用户NSManagedObject实例将保持最新?我意识到refreshObject:mergeChanges:的存在,但是,设置一个NSManagedObjectContextDidSaveNotification观察者来让对象实例保持最新似乎很复杂。当试图让多个NSManagedObject实例保持最新时,我可以看到这种方法变得不稳定。

回答

1

根据经验,最好的选择是不要试图保持它的最新状态。你需要使用NSManagedObjectContextDidSaveNotification实现来保持你的上下文是最新的 - 你无法解决这个问题 - 但为了获得一个有效的对象,每次更新后你都需要重新查询它。最简单的方法将取决于应用程序,但我经常使用唯一的服务器生成的ID来传递对象,然后在需要时使用这些ID将它们从数据库中提取出来。 (唯一的ID是必需的,因为我通常使用API​​来使用它们,所以你的结果会有所不同)技术可能工作或可能不工作的唯一地方是你在本地产生数据的地方,还没有)将它上传到数据库,它是永久ID。我通常会特别说明这些情况,并将设备ID与“真实”ID分开,只是为了跟踪它们直到获得真实ID。任何没有“真正的”ID的东西都是我的逻辑知道的东西,需要持久保存到服务器上,所以这对我很有用。

+0

当你说'唯一ID',你的意思是'NSManagedObject#objectID'?或者你在你的实体中插入额外的,特定于服务器的ID? –

+0

@LeviMcCallum我唯一用objectID的时候,就是我想要在两个不同的MOC之间转移;由于您无法自行处理托管对象,因此您必须通过对象ID获取新对象。 – RonLugge

相关问题