我正在研究构建一个与在线工作一样离线的应用程序。由于应用程序在脱机时无法与服务器通信,因此需要进行一定程度的同步。
在规划iPhone同步的离线操作时,有哪些好的工具可供阅读并开始考虑?
我必须自己创建哪些工具,而不是苹果已经提供的工具来帮助解决这个问题?
答案 0 :(得分:16)
我一直在开发一个应用程序来处理过去2个月左右的确切行为。它只有一小部分功能,只有在线功能和大量离线/在线功能。
我正在使用sqlite进行本地存储,这里建议使用sqlitepersistentobjects库的修改版本。 sqlitepersistentobjects的基本版本不是线程安全的,因此请注意您是否正在使用它。 (查看:objectivesync中的objectiverecord以获取线程安全的替代方案,但要准备好深入研究代码)。如果您愿意为3.0 sdk开发,那么核心数据是sqlite库的另一种可能性。
整体架构非常简单我使用sqlite建模本地存储,并使用objective resource针对rails应用和REST api进行远程交互。它可以使用xml或json进行数据序列化。
当在本地修改对象时,更改首先保存到该对象的sqlite数据库记录,然后添加到队列中,该队列也被序列化并存储在本地sqlite db中。 (然后可以随时处理队列)
如果有可用连接,则对任何排队的本地更改进行反序列化并添加到NSOperationQueue,然后在后台处理它们。
为了使这一切工作我已经将NSOperation子类化,以便它可以支持几种类型的远程队列操作 - 创建,更新,删除主要使用客观资源来发出远程请求。
使用NSOperationQueue和NSOperation的好处在于它们为您处理背景线程,所以我强烈建议您查看这些类的苹果文档以及苹果threading guide。
当应用程序加载时,会进行一些远程检查并在后台处理以提取最新数据 - 尽管老实说我仍在改变它的行为方式。
这是对我到目前为止所处理的内容的快速概述......希望它有所帮助。
答案 1 :(得分:14)
应用程序商店中有大量应用程序依赖于在线和离线数据
你应该做的是在启动你的应用程序时,运行一个后台线程(它以静默方式运行,以便你的用户永远不会看到任何延迟)。此线程从您的服务器下载最新数据并将其推送到您的本地数据库(sqlite是最佳选择)
确保您实施某种数据版本控制,以便您的应用只下载自上次下载后实际更改的数据 - 否则您将无需下载整个数据集,这可能非常庞大(取决于您的应用程序要求)
还要确保在执行此操作时测试互联网连接。如果没有可用的互联网,请提醒用户
通过这种方式,您可以获得两全其美的效果。远离互联网的用户仍然可以将您的应用与其本地sqlite数据一起使用在iphone os 3.0中,苹果公司推出了推送服务 - 您可以简单地“推送”您的数据,而不是“拉”,但这在目前的iPhone OS(2.x.x)中不可用
答案 2 :(得分:4)
推送可能不是一个可行的选择,因为您可以推送的数据量微乎其微,并且基本上回到“告诉我的应用程序进行服务器调用”。我们在Satchel中使用在线/离线模型。每当我们必须与服务器通信时,我们捆绑该通信(URL和可能的一些POST数据)并将其存储到数据库。如果我们在线,我们会立即撤回,发送它,当我们收到有效的回复时,我们会从数据库中删除记录。如果我们处于离线状态,那些行会累积起来,下次我们在线时会被发送出去。这在所有情况下都不是可行的模型,但可以适应大多数情况。
在3.0中,您可以访问CoreData,这是一个很棒的数据管理工具。除此之外,NSURLXXX系列是您的朋友。
答案 3 :(得分:2)
我会将我在离线时收集的所有信息存储在SQLite数据库中。然后,根据用户的请求,您可以使用HTTP或您可以提供的自定义TCP / IP协议将所有存储的信息与服务器进行SYNC。
我已经在Palm OS应用程序上使用这种方法已有近10年了,而且它们确实非常有效。
据我所知,你必须完成的唯一“工具”是带有Cocoa Touch的普通旧的OBJECTIVE-C。虽然您可以使用一些TCP / IP C ++库,但如果您决定实施自己的协议,这将使您的生活更轻松。
答案 4 :(得分:2)
http://blog.webscale.co.in/?p=159本文列出了处理离线/在线数据同步的方法。如果你想创建自己的框架,它可以帮助你。
答案 5 :(得分:1)
不知道您是否考虑过使用Sync Framework来管理同步。如果您感兴趣,可以查看开源项目OpenMobster的Sync服务。您可以执行以下同步操作
除此之外,所有修改都会自动跟踪并与云同步。当网络连接断开时,您可以让您的应用离线。它将跟踪任何更改,并在连接返回时自动在后台与云同步。它还提供跨多个设备的iCloud同步
此外,使用推送通知同步云中的修改,因此即使数据存储在本地,数据也始终是最新的。
以下是开源项目的链接:http://openmobster.googlecode.com
以下是iPhone App Sync的链接:http://code.google.com/p/openmobster/wiki/iPhoneSyncApp