我正在开发一个从服务器(XML、JSON 等)提取数据的常规 iPhone 应用程序,我想知道实现同步数据的最佳方法是什么。标准是速度(较少的网络数据交换)、健壮性(更新失败时的数据恢复)、离线访问和灵活性(当数据库结构发生轻微变化时的适应性,如新列)。我知道它因应用程序而异,但你们能分享一些你的策略/经验吗?
对我来说,我正在考虑这样的事情:
1) 在 iPhone 中存储上次修改日期
2) 启动后,发送一条消息,如 getNewData.php?lastModifiedDate=...
3) 服务器将只处理和发回上次修改过的数据。
4) 该数据的格式如下:
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
我也不想为每个属性制作 <+>, <->, <%>...,因为它太复杂了,所以可能在收到 <%> 字段时,我会删除数据使用指定的 id 然后再次添加它(假设这里的 id 不是自动递增的字段)。
5) 下载并更新所有内容后,我将更新上次修改日期字段。
这种策略的主要问题是:如果我在更新某些东西时网络出现故障 => 上次修改日期尚未更新 => 下次我重新启动应用程序时,我将不得不再次经历同样的事情。更不用说潜在的不一致数据了。如果我使用临时表进行更新并使整个事情原子化,它会起作用,但同样,如果更新时间太长(大量数据更改),用户必须等待很长时间才能获得新数据。我应该对每个数据字段使用 Last-Modified-Date 并逐步更新数据吗?