将iOS Core Data与发送XML的远程服务器同步

时间:2010-09-28 13:50:53

标签: iphone ipad ios4

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

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

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

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

3 个答案:

答案 0 :(得分:2)

我知道其中一种做法..

  1. 在本地和服务器数据库中再添加一个字段。即时间戳。
  2. 当用户更改本地数据库上的数据时,将时间戳更改为当前时间。 在服务器上做同样的事情。当有人编辑服务器上的数据时,将时间戳更改为当前时间。
  3. 当用户连接到互联网时...检查本地时间戳到服务器时间戳。 案例1两者都是相同的 - 无所事事 <情况2当地时间>服务器时间 - 使用sql获取时间戳大于服务器时间戳的所有数据..并将其上传到服务器上... 案例3本地&lt; server ....获取大于本地时间戳的所有记录,并将其添加到本地数据库..
  4. 我不确定是否有更好的方法......但这肯定有效......

答案 1 :(得分:0)

一种解决方案可能是

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

因此,让服务器成为主服务器,应该知道如何合并内容,客户端应该只在一些更改后逐步下载数据。

答案 2 :(得分:0)

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

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

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