核心数据的预填充版本?

我的应用程序涉及通过互联网获取一个大型的json文件,然后parsing成核心数据。

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

在Ray Wenderlich的网站上有一个关于预加载的合理教程。

一般来说 – 创build一个单独的项目,将JSON文件parsing成核心数据库。 创build你的真实项目,将对象模型和数据库文件复制到这个新项目。

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

确保永久存储协调器与文档文件夹中的数据库一起使用,而不是应用程序包中的数据库。

2012年6月更新

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

核心数据使用后备存储,这本质上是一个sqlite数据库(或在Mac OS上,可选的XML文件)。 您应该简单地将该文件添加到您的应用程序捆绑包,并将其与应用程序一起发货。 至于数据到数据库,这是我会做的:

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

我不会手工创buildsqlite文件,因为Core Data在后台做了一些“巫术”,搞乱了sqlite可以破坏事情。 另外,我见过开发人员使用多个目标。 为import。 这样,他们可以在有条件的编译器中编写代码,而不必担心项目维护。 例如:

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

Core Data数据库只是一个SQLite数据库文件。 您可以将其交付到主包中,然后将其复制到文档文件夹,然后将其与持久性商店协调人关联起来。