2012-07-15 74 views
1

嗨支持专家... 我正在写我的第一个iPad应用程序,并有一个工作测试版副本,解析XML文件,创建应用程序启动时的UIManagedDocument核心数据数据库。然而,这需要很长时间,我希望一次脱机并将初始数据直接包含到我的应用程序包中。不用说,我正在试图让它工作。预加载核心数据库UIManagedDocument黑色

我第一次跟着命令行实用程序方法见here这个工作,直到我进口.sqlite文件,并试图编辑persistentStoreCoordinator方法 - 我使用的是UIManagedDocument所以没有persistenStoreCoordinator方法在我AppDelegate - this page报价“在某些情况下,您不必编写任何代码来加载模型。如果您在Mac OS X上使用基于文档的应用程序,则NSPersistentDocument将管理为您找到并加载应用程序模型的任务。”

然后我试图将UIManagedDocument从我的应用程序的工作版本的模拟器复制为每this StackOverFlow question 这似乎只是persistentStore是空的,所以我的表也是工作。这正是问题here,但对这个问题的回答让我回到修改NSPersistentStoreCoordinator方法,我没有。

我加了一个测试NSFetchRequest到我的代码,我从我的应用程序包复制到UIManagedDocument文档目录 - 所以我知道我在我的应用程序捆绑UIManagedDocument是空的。我已经尝试从发现者拖放和使用终端的应付 - persistentStore文件似乎被正确移动,并具有大小106 KB,但我仍然在我的应用程序中得到一个空的数据库。

有关如何使其发挥作用的任何建议?

我是否需要按照UIManagedDocument类参考使用configurePersistenStoreCoordinatorForURL:ofType:modleConfiguration:StoreOptions:error: - 如果是的话我该怎么做?

我是否需要将一些核心数据方法添加到我的AppDelegate中,以便我可以修改我的persistenStoreCoordinator方法 - 如果有,该方法还需要做什么?

我是不是更好的利用我的命令行utlity创建的.sqlite DB或persistentStoreUIManagedDocument似乎使用?

+0

我想我解决了这个问题,并在这里写下了它:http://stackoverflow.com/questions/8683892/pre-load-core-data-database-in-ios-5-with-uimanageddocument/11713120# 11713120 – wrightak 2012-07-29 21:35:19

回答

0

您可以通过访问parentContext持久存储协调:

document.managedObjectContext.parentContext.persistentStoreCoordinator 

或者,如果你仅仅意味着你没有访问到构建持久存储的核心数据堆栈是建立在方法,那么它看起来这是一种旨在用于该目的,(你提到)挂钩:

覆盖configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:自定义持久性存储的加载或创建。

但是,在文档中对该方法的讨论并不能解释要做什么很好。也许你可以覆盖它并查看堆栈中尚未创建什么对象,可能有初始化的协调器连接到父上下文以供您配置。在NSPersistentDocument上同样命名的方法的文档是这样的,所以也许UIManagedDocument也是。

+0

感谢您的回复。按照您的想法,我查看了使用我的UIManagedDocument自动创建的NSPersistentStoreCoordinator。我仍在深入研究究竟发生了什么,但是我发现以下iCloud问题的答案似乎非常相关:http://stackoverflow.com/questions/10140400/core-data-and-icloud-adding-pre-populated -sqlite-file – 2012-07-15 19:05:36

+0

是的,迁移方法好像对你有用。我意识到,使用iCloud时无法直接复制数据库。我不记得究竟是哪一个,但我认为这是描述它的WWDC视频之一(可能是2011年)。如果您正在考虑iCloud,那么今年WWDC(2012)的核心数据和iCloud视频有很多关于设置商店和协调员的信息,尽管不是UIManagedDocument,但是他们可能会有一些启发信息。他们肯定会谈论有不同的商店,有些只是用于静态数据... – 2012-07-15 19:49:15

+0

...它们用来节省带宽,但其中一些可能是有用的,特别是如果你不能从UIManagedDocument中得到你想要的并且结束不得不恢复到自己设置堆栈。 – 2012-07-15 19:50:27