单向同步网站>使用Core Data的iPhone应用程序

时间:2011-08-23 12:26:51

标签: iphone database core-data sync

我正在构建一个带有数据库的iPhone应用程序(我很可能是第一次使用Core Data,但是根据你的答案,我仍然可以使用SQLite。)

该数据库的内容应该从一些在线存储(很可能是MySQL数据库)定期更新。

由于初始数据库相当大,它将在应用程序中,因此用户无需下载,更新将相当小,以便可以下载。您可以看到“Delta”更新是必须的(每次下载整个数据集的数据太多)。更新将包含一些新记录,并最终对现有记录进行一些更正

本地数据库将有一些需要更新的表/实体(它们之间有很多关系),这些表/实体将是只读的(*)。将有另外几个表/实体,用户可以在其中输入注释(读/写),但它们永远不必更新,这是私有用户数据。事实上,我有时会创建一个只有1-1关系的额外表,以保持良好的分离(数据集表/实体与注释表/实体)。

有人可以为我提供一种在线生成文件的方法,其中包含数据库中的所有更改,可以下载到手机并高效且正确地解析,以便应用这些更改/新记录。我一直在想类似于Rails用于维护其数据库的迁移,但似乎找不到任何看起来干净和高效的东西。记住不同表格/实体之间的数据关系是非常重要的,这是我的灵感失败......

(*)对于开始只读,稍后用户将能够添加记录并进行编辑。他永远无法编辑现有记录,他自己的记录也不需要返回服务器。

2 个答案:

答案 0 :(得分:3)

在广泛的建筑意义上,我建议这就是:

  1. 查看Restkit,它提供了一个出色的iOS库来访问Web API,以及将获取的信息存储到本地CoreData实例的超级简单方法
  2. 实现RESTful JSON接口,将MySQL数据库中的数据显示为JSON表示。对于任何现代Web框架,这应该是直截了当的。 Django提供Piston,Rails开箱即用,Drupal有服务框架,Symfony也有类似的功能。
  3. 将您的“上次更新”状态存储在NSUserDefaults变量中,然后将该日期时间附加到您对Web服务所做的每个请求中。这将允许您将结果集过滤为增量
  4. 我不能足够推荐RestKit。坚持几个小时的学习曲线,你永远不会回头。

答案 1 :(得分:0)

作为替代方案,我建议使用AFNetworking + MagicalRecord,因为你在提问中提到了Rails。 (Restkit对我来说太复杂了)

  1. AFNetworking 将处理与服务器的通信
  2. AFOAuth1Client ** AFOAuth2Client **将处理授权(例如,如果您使用rails,则使用门卫)
  3. MagicalRecord 将处理以ActiveRecord样式导入和查询核心数据。