使用Core Data实现网站和iPhone应用的单向同步

5
我正在开发一款iPhone应用程序,并使用数据库(最可能我会首次使用Core Data,但根据您在此处的答案,仍然可能会使用SQLite)。
这个数据库的内容应该定期从在线存储(最可能是MySQL数据库)中更新。
由于初始数据库将相当大,因此它将在应用程序中,因此用户无需下载该数据库,更新将相对较小,因此可以下载。您可以看到“Delta”更新是必须的(每次下载整个数据集只是太多数据)。更新将包括一些新记录和可能对现有记录进行的一些更正。
本地数据库将有几个表/实体(它们之间有很多关系)需要更新,这些表/实体将是只读的(*)。还将有另外几个表/实体,用户可以输入评论(读/写),但它们永远不需要被更新,这是私人用户数据。事实上,我有时会创建一个额外的表,只与1-1关系相关联,以保持数据集表/实体与注释表/实体分离。
有人能为我提供一种在网上生成带有所有db更改的文件的方法,该文件可以下载到手机并高效且正确地解析,以便应用新的更改/新记录。我一直在考虑类似于Rails使用的迁移的东西来维护其数据库,但似乎找不到任何看起来干净且性能良好的东西。请记住,不同表/实体之间的关系非常重要,这是我的灵感所在...(*)首先只读,以后用户将能够添加记录并编辑它们。他永远无法编辑现有记录,并且他自己的记录不需要返回到服务器。
2个回答

3

从概括的架构方面来看,我建议:

  1. 看一下RestKit,它为iOS提供了一个访问Web API的绝佳库,并提供了将获取的信息存储到本地CoreData实例中的超级简单方法。
  2. 实现一个RESTful JSON接口,将数据从MySQL数据库呈现为JSON表示。这对于任何现代Web框架来说都很简单。Django提供了Piston,Rails可以直接使用,Drupal有服务框架,Symfony也有类似的功能。
  3. 将“最后更新”的状态存储在NSUserDefaults变量中,然后将该日期时间附加到您向WebService发出的每个请求中。这将使您可以将结果集过滤到增量。

我无法推荐RestKit高度。花几个小时去克服学习曲线,你就会不断前进。


Restkit似乎是一个很好的解决方案,但对于像我这样的新手来说,掌握它可能会很困难。它已经开始出现编译示例时无法编译的问题。在编译过程中出现错误:合成属性“requestQueue”必须与兼容的ivar命名相同+在RKClient.m中未找到指定的Ivar名称“_requestQueue”,使用Xcode 4.1。 - Glenn
听起来你可能使用了一个错误的git checkout,或者头文件的搜索路径出现了问题。他们最近更新了主项目文件,所以再试一下吧。至于你的后端,如果你喜欢MySQL并且不介意使用Ruby,可以看看Recess - Greg Combs

0
作为一个替代方案,我建议使用AFNetworking+MagicalRecord,因为你在问题中提到了Rails。(对我来说,Restkit太复杂了)
  1. AFNetworking将负责与服务器通信
  2. AFOAuth1Client ** AFOAuth2Client**将处理授权(如果您使用Rails,可以使用Doorkeeper等)
  3. MagicalRecord将以ActiveRecord风格处理您的核心数据的导入和查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接