【发布时间】:2011-10-26 19:44:40
【问题描述】:
我的应用程序涉及通过互联网获取一个大型 json 文件,然后将其解析为 Core Data。
很好,但是我如何才能将这个 Core Data 数据库的已填充版本放入我的应用程序中,所以当他们第一次启动它时它就在那里。用户可以决定稍后刷新它。
【问题讨论】:
标签: iphone objective-c ios json core-data
我的应用程序涉及通过互联网获取一个大型 json 文件,然后将其解析为 Core Data。
很好,但是我如何才能将这个 Core Data 数据库的已填充版本放入我的应用程序中,所以当他们第一次启动它时它就在那里。用户可以决定稍后刷新它。
【问题讨论】:
标签: iphone objective-c ios json core-data
Ray Wenderlich's site 有一个关于预加载的合理教程。
一般 - 创建一个单独的项目,将 JSON 文件解析为核心数据数据库。创建您的真实项目,将对象模型和数据库文件复制到这个新项目。
现在,在应用启动时,检查文档目录中是否存在数据库,如果不存在,则从应用包中复制预填充的数据库。
确保 Persistent Store Coordinator 与文档文件夹中的数据库而不是应用程序包中的数据库一起使用。
2012 年 6 月更新
我在 GitHub 上有一个名为 PromNight 的小示例项目,它演示了如何使用 Xcode 工作区和一个 iPad 项目和一个 OS X 项目来为 Core Data 预加载数据。这使用在两个应用程序之间共享的对象模型,这有助于在预加载时保持更改同步。
【讨论】:
Core Data 使用后备存储,它本质上是一个 sqlite 数据库(或者,在 Mac OS 上,可选的 XML 文件)。您只需将该文件添加到您的应用程序包中并随应用程序一起提供。至于将数据输入数据库,我会这样做:
我不会手动创建 sqlite 文件,因为 Core Data 在幕后做了一些“巫术”,并且弄乱 sqlite 会破坏事情。此外,我还看到开发人员使用多个目标。为进口。这样,他们可以在有条件的编译器中编写代码,而不必担心项目维护。例如:
#ifdef kImportTarget
//run core data import
#else
// run the Core Data stack setup from an existing file
#endif
【讨论】:
Core Data 数据库只是一个 SQLite 数据库文件。您可以在主包中交付它,然后将其复制到您的文档文件夹,然后再将其与您的持久存储协调器相关联。
【讨论】: