问题 Core Data的预填充版本?


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

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


5250
2017-08-14 15:13


起源



答案:


有关于预加载的合理教程 Ray Wenderlich的网站

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

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

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

2012年6月更新

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


9
2017-08-14 16:29



为Ray Wenderlich +1。 - Moshe


答案:


有关于预加载的合理教程 Ray Wenderlich的网站

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

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

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

2012年6月更新

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


9
2017-08-14 16:29



为Ray Wenderlich +1。 - Moshe


Core Data使用后备存储,它本质上是一个sqlite数据库(或者,在Mac OS上,可选地是一个XML文件)。您只需将该文件添加到应用程序包中,然后将其与应用程序一起发送。至于将数据导入数据库,这就是我要做的:

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

我不会手工创建sqlite文件,因为Core Data在幕后做了一些“voodoo”,并且搞乱sqlite会破坏事情。此外,我见过开发人员使用多个目标。进口。这样,他们可以在编译器条件下编写代码,然后不必担心项目维护。例如:

#ifdef kImportTarget

//run core data import

#else

// run the Core Data stack setup from an existing file

#endif

5
2017-08-14 16:29



在iOS上,我认为您不能选择XML后备存储。虽然这是Mac OS的一个选项。 - Abizern
@Abizern - 你确定吗?也许你可以从文档中找到引文吗? - Moshe
是,我确定 developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/... 正如它所说 - XML商店在iOS中不可用。 - Abizern
太棒了,谢谢! - Moshe


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


2
2017-08-14 16:20