1

我正在使用 Core Data 的存储功能。在某些时候,我进行了需要我更新本地对象图的外部 API 调用。我目前的(愚蠢的)计划是清除旧 NSManagedObjects 的所有实例(无论它们是否已更新)并用它们的新等价物替换它们——一种王牌合并策略。

我觉得有更好的方法来做到这一点。我有来自服务器的唯一标识符,所以我应该能够将它们与商店中的对象相匹配。有没有办法做到这一点,而无需通过标识符从上下文中手动获取对象并重置每个属性?有没有办法让我创建一个全新的上下文,重新生成对象图,然后将其提供给 Core Data 以根据它们的唯一标识符进行合并?

4

1 回答 1

0

基于服务器唯一 ID 的匹配策略是一个好方法。希望您可以让您的服务器仅交付自上次更新以来已更改的对象(您将跟踪并在服务器调用中提供)。

但是,为了更新 Core Data 对象,您必须获取它们、实例化 NSManagedObjects、进行更改并保存它们。您可以在后台线程(子上下文performBlock:)中完成所有这些操作,但您仍然需要将对象往返传输到内存中并返回存储。在子上下文和它自己的线程中执行此操作将使您的 UI 保持敏捷,但您仍然必须进行处理。

另一个想法:在最后一天左右,我一直在阅读关于AFIncrementalStoreNSIncrementalStore实现,它用于AFNetworking按需提供 Core Data 属性,在本地缓存。我还没有用它构建任何东西,但它看起来很漂亮。听起来您的项目可能很好地利用了这个库。代码在 GitHub 上:https ://github.com/AFNetworking/AFIncrementalStore 。

于 2013-03-27T18:00:11.870 回答