使用Web服务的核心数据同步过程

时间:2011-10-03 02:44:42

标签: iphone core-data soap sync

我正在开发一个需要与远程数据库同步的应用程序。数据库连接到基于Web的应用程序,用户可以修改网页上的某些记录。(添加/删除/修改)用户还可以修改移动应用程序中的相同记录。因此,当用户在移动应用程序中按下同步按钮时,每一方(服务器 - 客户端)必须保留SAME最新记录。服务器和客户端之间的通信由Web Serives。(SOAP)提供,我无法更改它,因为它是严格的要求。 (我知道这是可以使用的最差方式)。另一个要求是客户端无法删除服务器记录。

我已经熟悉通信Web服务(NSURLConnection),接收数据(NSData)和解析它。但我无法弄清楚同步过程应该如何。我已经阅读了this一些关于如何使用一些额外属性修改服务器和客户端的答案( last_updated_date is_sync


然后我可以想象解决这个问题:

作为第一步,客户端会尝试通过发送未同步的服务器来修改服务器记录。新的重新校正直接添加到数据库中,但应根据 last_updated_date 比较修改后的记录。 在此步骤结束时,服务器具有 最新数据

但问题是如何管理修改移动应用中的记录。我以两种方式思考:

  1. 是创建新MOC的最愚蠢方式,将所有记录下载到此中并使用现有记录进行更改。

  2. 是获取所有不在客户端的修改记录,将它们导入新的MOC并将这两者结合起来。但在这一点上我有一些担忧,如

    可能有两个项目被复制(旧版本 - 更新版本)

    已删除的项目仍可位于主要MOC中。

    我必须连接MOC之间的多个关系。 (新记录与旧记录的关系可能超过4个)

  3. 所以我猜你们可以帮助我找到最好的想法吗?

1 个答案:

答案 0 :(得分:1)

同步数据是一项非常重要的任务。

有几个级别的同步。基于您的问题,我猜你只需要将更改推送回服务器。在这种情况下,我建议在-save: NSManagedObjectContext期间捕捉它。在-save:之前,您可以查询NSManagedObjectContext并询问其创建,更新和删除的对象。从那里,您可以构建一个查询以回发到您的Web服务。

但是,处理合并要复杂得多,我建议你在服务器上处理它们。

关于你的关系问题;我建议你打开第二个问题,这样就不会有混淆。

更新

服务器完成合并后,会将新的“真相”推送给客户端。客户端应该获取这些更新的记录并将它们合并到自己的更改中。这种合并非常简单:

  1. 使用uniqueID查找现有记录。
  2. 如果记录存在,则更新它。
  3. 如果记录不存在则创建它。
  4. 暂时忽略性能,这是相当直接的:

    1. 为新数据设置循环。
    2. 设置NSPredicate以标识要更新/创建的记录。
    3. 运行您的获取请求。
    4. 如果记录存在,请更新它。
    5. 如果没有则创建它。
    6. 一旦你完成了这次全程旅行,你就可以开始看性能等了。第一步是让它发挥作用:)