1

我有一个使用 Web 服务填充的基于 CoreData 的应用程序。当用户更改我的 Web 服务中对象的数据时,我想将该更改推送回我的 Web 服务。

实现这一目标的最佳实践是什么?我可能有很多需要发送的更改对象,但用户可能没有连接,我希望它在后台发生。

我是否在 CoreData 中标记对象并需要远程保存?如果可能的话,然后每隔几分钟对它们进行批处理?我使用过 Flurry 和 Google Analytics,他们一定在做类似的事情,但我不确定最好的方法是什么。

也许 Core Data 中有一个单独的表,其中包含需要更新的 EntityName 和 ObjectID?

4

2 回答 2

2

看看 NSIncrementalStore,特别是 AFIncrementalStore(它利用 NSIncrementalStore)。

在这里讨论两者的好文章:http: //nshipster.com/nsincrementalstore/

于 2012-10-24T16:21:17.993 回答
2

它在某种程度上取决于服务器 API 以及它想要什么样的信息。

在您的核心数据实体上添加修改标志或日期是一种简单的方法。只需查找标记所在的每个对象YES或日期比上次同步更新的对象。但它是有限的——你如何处理告诉服务器你删除了一个对象?您可能需要保留某种外部日志——例如,包含等待发送的传出更改的 plist。

我使用的通用方案是这样的:

  1. 添加观察者NSManagedObjectContextWillSaveNotification
  2. 收到此通知后,向托管对象询问insertedObjectsupdatedObjectsdeletedObjects以找出更改的内容。
  3. 根据这些结果更新我的传出更改列表。
  4. 同步时,读取 plist,发送更改并将列表清零(确保这与 did-save 通知同步,这样您就不会在未发送更改的情况下意外清零)。

在此过程中,您还会遇到其他几个细节——例如,如果同步失败,请不要删除传出更改列表。

于 2012-10-25T00:22:07.277 回答