【问题标题】:Prefilled version of Core Data?Core Data 的预填充版本?
【发布时间】:2011-10-26 19:44:40
【问题描述】:

我的应用程序涉及通过互联网获取一个大型 json 文件,然后将其解析为 Core Data。

很好,但是我如何才能将这个 Core Data 数据库的已填充版本放入我的应用程序中,所以当他们第一次启动它时它就在那里。用户可以决定稍后刷新它。

【问题讨论】:

    标签: iphone objective-c ios json core-data


    【解决方案1】:

    Ray Wenderlich's site 有一个关于预加载的合理教程。

    一般 - 创建一个单独的项目,将 JSON 文件解析为核心数据数据库。创建您的真实项目,将对象模型和数据库文件复制到这个新项目。

    现在,在应用启动时,检查文档目录中是否存在数据库,如果不存在,则从应用包中复制预填充的数据库。

    确保 Persistent Store Coordinator 与文档文件夹中的数据库而不是应用程序包中的数据库一起使用。

    2012 年 6 月更新

    我在 GitHub 上有一个名为 PromNight 的小示例项目,它演示了如何使用 Xcode 工作区和一个 iPad 项目和一个 OS X 项目来为 Core Data 预加载数据。这使用在两个应用程序之间共享的对象模型,这有助于在预加载时保持更改同步。

    【讨论】:

      【解决方案2】:

      Core Data 使用后备存储,它本质上是一个 sqlite 数据库(或者,在 Mac OS 上,可选的 XML 文件)。您只需将该文件添加到您的应用程序包中并随应用程序一起提供。至于将数据输入数据库,我会这样做:

      1. 编写一些代码以从任何格式导入数据。
      2. 运行该代码。
      3. 从设备或模拟器中复制 sqlite 文件。
      4. 将新创建的 sqlite 文件添加到 Xcode 中的项目中。

      我不会手动创建 sqlite 文件,因为 Core Data 在幕后做了一些“巫术”,并且弄乱 sqlite 会破坏事情。此外,我还看到开发人员使用多个目标。为进口。这样,他们可以在有条件的编译器中编写代码,而不必担心项目维护。例如:

      #ifdef kImportTarget
      
      //run core data import
      
      #else
      
      // run the Core Data stack setup from an existing file
      
      #endif
      

      【讨论】:

      【解决方案3】:

      Core Data 数据库只是一个 SQLite 数据库文件。您可以在主包中交付它,然后将其复制到您的文档文件夹,然后再将其与您的持久存储协调器相关联。

      【讨论】:

        猜你喜欢
        • 2013-06-08
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多