【问题标题】:Pre load core data database coming up black with UIManagedDocument使用 UIManagedDocument 预加载核心数据数据库
【发布时间】:2012-07-14 09:57:59
【问题描述】:

您好,支持专家... 我正在编写我的第一个 iPad 应用程序,并且有一个可以解析 XML 文件以在应用程序启动时创建 UIManagedDocument Core Data DB 的工作测试版副本。但是,这需要很长时间,我想在离线后完成,并将初始数据直接包含到我的应用程序包中。 不用说,我试图让它发挥作用是在碰壁。

我首先遵循命令行实用程序方法,请参阅here 这一直有效,直到我导入 .sqlite 文件并尝试编辑 persistentStoreCoordinator 方法 - 我使用的是 UIManagedDocument,所以没有 @ 987654329@ 方法在我的AppDelegate - this page 引用“在某些情况下,您不必编写任何代码来加载模型。如果您在 Mac OS X 上使用基于文档的应用程序,NSPersistentDocument 管理任务为您查找和加载应用程序的模型。”

然后我尝试按照this StackOverFlow question从模拟器中我的应用程序的工作版本复制UIManagedDocument 这似乎有效,除了persistentStore 是空的,因此我的表也是。这正是here 提出的问题,但对该问题的回答让我重新开始修改我没有的NSPersistentStoreCoordinator 方法。

我在代码中添加了一个测试NSFetchRequest,我将应用程序包中的UIManagedDocument 复制到了文档目录中——所以我知道我的应用程序包中的UIManagedDocument 是空的。我尝试从 finder 拖放并使用终端进行处理 - persistentStore 文件似乎已正确移动并且大小为 106 KB,但我的应用程序中仍然有一个空数据库。

关于如何让它工作的任何建议?

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

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

我是使用我的命令行实用程序创建的 .sqlite DB 还是使用 persistentStore UIManagedDocument 似乎更好?

【问题讨论】:

标签: ios core-data preload uidocument nspersistentstore


【解决方案1】:

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

document.managedObjectContext.parentContext.persistentStoreCoordinator

或者,如果您只是说在构建核心数据堆栈时您无权访问构建持久存储的方法,那么看起来这就是为此目的而设计的钩子,(正如您所提到的) :

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

但是文档中关于该方法的讨论并没有很好地解释如何做。也许您可以覆盖它并查看堆栈中已创建和尚未创建的对象,可能有一个已初始化的协调器附加到父上下文供您配置。 NSPersistentDocument 上类似名称的方法的文档是这样的,所以也许 UIManagedDocument 也是。?

【讨论】:

  • 感谢您的回复。按照您的想法,我查看了使用我的 UIManagedDocument 自动创建的 NSPersistentStoreCoordinator。我仍在深入研究到底发生了什么,但我发现以下 iCloud 问题的答案似乎非常相关:stackoverflow.com/questions/10140400/…
  • 是的,迁移方法似乎对您有用。我知道使用 iCloud 时不能直接复制数据库。我不记得确切是哪一个,但我认为这是描述它的 WWDC 视频(可能是 2011 年)之一。如果您正在考虑 iCloud,那么今年 WWDC(2012 年)的核心数据和 iCloud 视频有很多关于设置存储和协调器的信息,尽管不是 UIManagedDocument,但其中可能有一些启发性的信息。他们肯定会谈论拥有不同的商店,有些只是为了静态数据......
  • ... 他们用它来节省带宽,但其中一些可能很有用,特别是如果您无法从 UIManagedDocument 中获得所需的内容并最终不得不恢复设置堆栈自己起来。
  • 再次感谢您的大力支持和想法。我一直在研究从我从工作应用程序复制到项目文件结构中的 persistentStore 文件创建 NSPersistentStore 对象。问题是我收到一个关于无法找到其 StoreType 的错误。仔细查看指定的 init 文档,它说您必须初始化存储元数据 - 我还没有这样做。看看你是怎么做的,我发现developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…...也许我需要一种新方法
  • 原子存储类用于创建您自己的后备存储提供程序。即你想使用 SQLite 以外的东西。有时给出的示例是您希望使用某种自定义 Web 服务作为核心数据的后备存储。听起来您可能走错了路。
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多