将Core Data更改推送到Web服务的最佳实践?

时间:2012-10-24 15:40:25

标签: objective-c ios cocoa-touch core-data

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

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

我是否在CoreData中标记对象并需要远程保存?如果可能的话,每隔几分钟就批量一次?我使用过Flurry和Google Analytics,他们必须做这样的事情,但我不确定最好的方法是什么。

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

2 个答案:

答案 0 :(得分:2)

查看NSIncrementalStore,特别是AFIncrementalStore(使用NSIncrementalStore)。

这里讨论两篇好文章:http://nshipster.com/nsincrementalstore/

答案 1 :(得分:2)

这在某种程度上取决于服务器API以及它想要的信息类型。

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

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

  1. NSManagedObjectContextWillSaveNotification
  2. 添加观察者
  3. 收到此通知后,请询问托管对象insertedObjectsupdatedObjectsdeletedObjects以了解更改内容。
  4. 根据这些结果更新我的外发更改plist。
  5. 同步时,读取plist,发送更改,并将列表清零(确保这与已保存的通知同步,这样您就不会意外地将更改归零而不发送)。
  6. 在此过程中还会遇到其他一些细节 - 例如,如果同步失败,请不要删除传出更改列表。