我正在研究构建一个与在线工作一样离线的应用程序.由于应用程序在脱机时无法与服务器通信,因此需要进行某种程度的同步.
在计划iPhone同步的离线操作时,有哪些好的工具可供阅读并开始考虑?
我必须自己创建哪些工具,而不是苹果已经提供的工具来帮助解决这个问题?
我一直在研究一个应用程序来处理这个过去2个月左右的确切行为.它只有一小部分功能,只有在线功能和大量离线/在线功能.
我正在使用sqlite进行本地存储,这里建议使用sqlitepersistentobjects库的修改版本.sqlitepersistentobjects的基本版本不是线程安全的,因此请注意您是否正在使用它.(查看objectiverecord in:objectiveync for a thread safe alternative,但要准备好深入研究代码).如果你愿意为3.0 sdk开发,那么核心数据是sqlite库的另一种可能性.
总体架构很简单我使用sqlite建模本地存储,并使用针对rails应用和REST api的客观资源进行远程交互.它可以使用xml或json进行数据序列化.
在本地修改对象时,首先将更改保存到该对象的sqlite数据库记录,然后添加到队列中,该队列也被序列化并存储在本地sqlite db中.(然后可以随时处理队列)
如果有可用连接,则对任何排队的本地更改进行反序列化并添加到NSOperationQueue,然后在后台处理它们.
为了完成所有工作,我将NSOperation子类化,以便它可以支持几种类型的远程队列操作 - 创建,更新,删除主要使用客观资源来发出远程请求.
使用NSOperationQueue和NSOperation的好处在于它们为您处理后台线程,所以我强烈建议您查看这些类的apple docs以及apple 线程指南.
当应用程序加载时,会进行一些远程检查并在后台处理以下载最新数据 - 尽管说实话,我仍然在改变它的行为方式.
这是我迄今为止要处理的内容的快速概述...希望它有所帮助.
应用程序商店中有大量应用程序依赖于在线和离线数据
你真正应该做的是在你的应用程序启动时,运行一个后台线程(它以静默方式运行,以便你的用户永远不会看到任何延迟).此线程从您的服务器下载最新数据并将其推送到您的本地数据库(sqlite是最佳选择)
确保您实现某种数据版本控制,以便您的应用程序仅下载自上次下载后实际更改的数据 - 否则您将不必要地下载整个数据集,这可能非常大(取决于您的应用程序要求)
这样做时还要确保测试互联网连接.如果没有可用的互联网,请提醒用户
这样你就可以获得两全其美.远离互联网的用户仍然可以将您的应用与其本地sqlite数据一起使用
在iphone os 3.0中,apple推出了推送服务 - 你可以简单地"推"你的数据,而不是做"PULL",但这在当前的iPhone OS(2.xx)中是不可用的