【问题标题】:One way sync website > iPhone app using Core Data使用 Core Data 的一种方式同步网站 > iPhone 应用程序
【发布时间】:2011-11-01 22:13:09
【问题描述】:

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

此数据库的内容应定期从某些在线存储(最有可能是 MySQL 数据库)更新。

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

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

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

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

【问题讨论】:

    标签: iphone database core-data sync


    【解决方案1】:

    从广义上讲,我的建议如下:

    1. 看看Restkit,它提供了一个出色的 iOS 库,用于访问 Web API,以及将获取的信息存储到本地 CoreData 实例的超级简单方法
    2. 实现 RESTful JSON 接口以将 MySQL 数据库中的数据呈现为 JSON 表示。这对于任何现代 Web 框架都应该是直截了当的。 Django 提供 Piston,Rails 开箱即用,Drupal 有服务框架,Symfony 有类似的功能。
    3. 将您的“上次更新”状态存储在 NSUserDefaults 变量中,然后将该日期时间附加到您对 Web 服务发出的每个请求中。这将允许您将结果集过滤为增量

    我不能高度推荐 RestKit。坚持几个小时的学习曲线,你将永远不会回头。

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多