2011-08-14 71 views
10

我的应用程序涉及通过互联网获取大型json文件,然后将其解析为Core Data。预填充版本的核心数据?

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

回答

2

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

9

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

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

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

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

更新2012年6月

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

+1

+1为Ray Wenderlich。 – Moshe

4

核心数据使用后备存储,它本质上是一个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 
+0

在iOS上,我不认为您可以选择XML支持存储。尽管这是Mac OS的一个选项。 – Abizern

+0

@Abizern - 你确定吗?也许你可以从文档中找到引用? – Moshe

+0

是的,我确定http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html正如它所说的 - 该XML存储在iOS中不可用。 – Abizern