使用 RestKit 和 CoreData 同步修改对象的正确方法

Posted

技术标签:

【中文标题】使用 RestKit 和 CoreData 同步修改对象的正确方法【英文标题】:Proper way to sync modified objects using RestKit and CoreData 【发布时间】:2012-07-02 08:15:18 【问题描述】:

我需要帮助了解如何管理使用 CoreData 持久化远程对象的 iPhone 应用程序的 API。据我了解,当 ios 应用程序获取远程对象时,它会加载资源路径中的所有对象。

对于后续请求,我希望通过让 Web 服务器仅返回自上次更新时间以来已更新的对象来减少开销。我通过返回 update_at 比请求的 last_update 时间更新的对象来执行此操作。

RestKit 然后解析修改的对象并将其映射到 CoreData。这种实现是使用 RestKit 和 CoreData 执行同步的正确方法,还是我错过了介于两者之间的层?

谢谢!

【问题讨论】:

【参考方案1】:

通常 RESTful 接口应该尝试“回归基础”。在您的情况下,我建议使用 HTTP 标头 If-Modified-Since。它比传递另一个参数稍微干净一些,因为 RestKit 会在你不做任何事情的情况下处理 HTTP 状态响应。

否则,您的方法似乎正常。服务器同步是一个巨大的问题,有很多文献和方法处理它。如果你想做更复杂的事情,那么快速的网络搜索会找到一些方法,但你的方法是我通常最终会做的。

如果用户可以在您的应用上编辑数据,则存在同步在设备上所做的修改的问题。为此,您通常设置对象范围“已修改”标志,并且仅在对象被修改时才上传对象。

【讨论】:

感谢您的意见。 If-Modified-Since 方法是否返回所有远程对象,如果只有一两个被更新?原因是我不希望服务器返回这么多对象并导致加载时间过长。 我从您的问题中假设您可以控制服务器?这意味着你必须更新它。您可以像以前一样做,但不是传递 last_update 而是读取此标头。来自the HTTP standard,“此功能的目的是允许以最少的事务开销有效地更新缓存信息。”。 深入研究这一点,当从应用程序中删除远程对象时会发生什么。 iOS 应用程序如何知道该项目已被删除,我如何才能将此更改推送到设备上?

以上是关于使用 RestKit 和 CoreData 同步修改对象的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

JSONKit +lidenbrock 与。 RestKit?(使用CoreData)

如何处理与 RestKit 的关系同步(离线支持)

让 RestKit 离开特定的孤立 CoreData 托管对象

RestKit 在映射或实际插入 CoreData DB 之前比较本地对象和远程对象

CoreData + Restkit 当用户退出应用程序时要执行啥任务?

RestKit 和 Coredata