【问题标题】:Syncing iOS Core Data with remote server which sends XML将 iOS 核心数据与发送 XML 的远程服务器同步
【发布时间】:2011-04-18 07:49:22
【问题描述】:

我的应用程序从远程服务器解析 XML 并将对象存储在 Core Data(SQLite 存储)中。这样用户就可以在离线时通过从本地存储中读取来浏览材料。

用户可以在离线浏览时对对象进行更改,这些对象存储在 Core Data SQLite 存储中。另一个用户对远程服务器上的对象进行了一些更改,并将其存储在那里。现在,当我检测到互联网连接时,我的应用程序应该将我的本地存储与远程服务器同步。这意味着远程服务器会根据我离线时对我的核心数据(SQLite 存储)所做的更改进行更新,而我的本地存储 - 核心数据(SQLite 存储)需要根据其他用户对远程服务器所做的更改进行更新。

例如有一个论坛,它存储在我的本地存储中,以便我在旅行时可以阅读和回复。稍后可以访问互联网时。我的应用程序应该自动将我存储在核心数据中的所有回复放到远程服务器上,并将远程服务器上的其他帖子带到我的本地存储中。

远程服务器正在发送我正在解析并存储在 Coredata 中的 XML。 我的问题是如何同步它? 当发生变化时,双向沟通如何发生? 如何仅同步已更改的数据而不同步导入整个远程服务器数据库,反之亦然?

【问题讨论】:

    标签: iphone ipad ios4


    【解决方案1】:

    我知道其中一种方法..

    1. 在本地和服务器数据库中再添加一个字段。即时间戳。
    2. 当用户更改本地数据库上的数据时,将时间戳更改为当前时间。 在服务器上做同样的事情......即当有人在服务器上编辑数据时,将时间戳更改为当前时间。
    3. 当用户连接到互联网时...检查本地时间戳到服务器时间戳.. 案例 1 两者都一样 - 无事可做 案例2本地时间>服务器时间-使用sql获取时间戳大于服务器时间戳的所有数据..并将其上传到服务器上... case 3 local

    我不确定是否有更好的方法...但这肯定有效...

    【讨论】:

      【解决方案2】:

      一个解决方案可能是

      • iphone 将更改同步到服务器
      • 服务器合并新旧东西
      • iphone 从服务器获取新的更改(来自合并)

      所以让服务器成为应该知道如何合并内容的主服务器,客户端应该只在一些更改后增量下载数据。

      【讨论】:

      • 感谢 Kiran 和 brutella。尝试实现它,看看它是如何工作的。
      【解决方案3】:

      交易。您希望遵循 ACID 交易规则。本质上,您必须确保在将本地写入更改为更新之前,您尚未在本地刷新的数据尚未更新。

      因此,最简单的方法是让用户从服务器获取最新更新,然后覆盖该更新并确保在该过程中不会发生其他更新。更好的是,使用线程阻塞来确保没有其他事情发生。

      如果您使用 Google 交易或 ACID,将会有很多信息。在 RDBMS 环境中,这是一个很大的领域,许多用户可能会破坏数据,并且在写入和更新之间必须保持锁定。

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        相关资源
        最近更新 更多