我的应用程序涉及通过互联网获取大型json文件,然后将其解析为Core Data。
这很好,但我怎么能把这个已经填充的Core Data数据库版本放到我的应用程序中,所以当它们第一次启动它时它就在那里。并且用户可以决定稍后刷新它。
我的应用程序涉及通过互联网获取大型json文件,然后将其解析为Core Data。
这很好,但我怎么能把这个已经填充的Core Data数据库版本放到我的应用程序中,所以当它们第一次启动它时它就在那里。并且用户可以决定稍后刷新它。
有关于预加载的合理教程 Ray Wenderlich的网站。
通常 - 创建一个单独的项目,将JSON文件解析为核心数据数据库。创建您的真实项目,将Object模型和数据库文件复制到此新项目。
现在,在app启动时,检查文档目录中是否存在数据库,如果不存在,请从应用程序包中复制预先填充的数据库。
确保持久性存储协调器与文档文件夹中的数据库一起使用,而不是应用程序包中的数据库。
2012年6月更新
我在GitHub上有一个小例子项目叫做 舞会夜 演示了使用带有iPad项目的Xcode Workspace和OS X项目来预加载Core Data的数据。这使用在两个应用程序之间共享的对象模型,这有助于在预加载时保持同步更改。
有关于预加载的合理教程 Ray Wenderlich的网站。
通常 - 创建一个单独的项目,将JSON文件解析为核心数据数据库。创建您的真实项目,将Object模型和数据库文件复制到此新项目。
现在,在app启动时,检查文档目录中是否存在数据库,如果不存在,请从应用程序包中复制预先填充的数据库。
确保持久性存储协调器与文档文件夹中的数据库一起使用,而不是应用程序包中的数据库。
2012年6月更新
我在GitHub上有一个小例子项目叫做 舞会夜 演示了使用带有iPad项目的Xcode Workspace和OS X项目来预加载Core Data的数据。这使用在两个应用程序之间共享的对象模型,这有助于在预加载时保持同步更改。
Core Data使用后备存储,它本质上是一个sqlite数据库(或者,在Mac OS上,可选地是一个XML文件)。您只需将该文件添加到应用程序包中,然后将其与应用程序一起发送。至于将数据导入数据库,这就是我要做的:
我不会手工创建sqlite文件,因为Core Data在幕后做了一些“voodoo”,并且搞乱sqlite会破坏事情。此外,我见过开发人员使用多个目标。进口。这样,他们可以在编译器条件下编写代码,然后不必担心项目维护。例如:
#ifdef kImportTarget
//run core data import
#else
// run the Core Data stack setup from an existing file
#endif
Core Data数据库只是一个SQLite数据库文件。您可以在主包中提供它,然后将其复制到文档文件夹,然后再将其与持久性存储协调器关联。