我有一个基于CoreData的应用程序,使用Web服务填充。当用户更改我的Web服务中的对象数据时,我想将该更改推送回我的Web服务。
实现这一目标的最佳做法是什么?我可能有很多需要发送的更改对象,但用户可能没有连接,我希望它在后台发生。
我是否在CoreData中标记对象并需要远程保存?如果可能的话,每隔几分钟就批量一次?我使用过Flurry和Google Analytics,他们必须做这样的事情,但我不确定最好的方法是什么。
也许Core Data中的一个单独的表包含需要更新的EntityName和ObjectID?
答案 0 :(得分:2)
查看NSIncrementalStore,特别是AFIncrementalStore(使用NSIncrementalStore)。
这里讨论两篇好文章:http://nshipster.com/nsincrementalstore/
答案 1 :(得分:2)
这在某种程度上取决于服务器API以及它想要的信息类型。
在Core Data实体上添加修改标志或日期是一种简单的方法。只需查找标志为YES
的每个对象或日期比上次同步更新的对象。它虽然有限 - 你怎么处理告诉服务器你删除了一个对象?您可能需要保留某种外部日志 - 例如,包含等待发送的传出更改的plist。
我使用过的通用方案是这样的:
NSManagedObjectContextWillSaveNotification
insertedObjects
,updatedObjects
和deletedObjects
以了解更改内容。在此过程中还会遇到其他一些细节 - 例如,如果同步失败,请不要删除传出更改列表。