Core Data的预填充版本?

can*_*boy 11 iphone json core-data objective-c ios

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

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

Abi*_*ern 10

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

通常 - 创建一个单独的项目,将JSON文件解析为核心数据数据库.创建您的真实项目,将Object模型和数据库文件复制到此新项目.

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

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

2012年6月更新

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


Mos*_*she 5

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
Run Code Online (Sandbox Code Playgroud)


ado*_*oho 2

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