6

我一直在查看有关核心数据的文档,并试图弄清楚如何安排核心数据堆栈,以便我的所有 UITableViewControllers 都可以访问它。Apple 提供的所有示例都表明这是在 AppDelegate 上实现的,但文档不推荐这种方法,因为它太复杂了!见链接

(为什么 iPhone SDK 文档中没有提到这一点是另一个谜)

我的问题是,我已经按照 TopSongs 中显示的核心数据示例重复了设计模式,以检索子表视图的 ManagedObjectContext 实体,并产生以下错误……找不到实体名称“Song”的 NSManagedObjectModel。奇怪的是,这可以在父表视图中找到,所以我认为这是因为 AppDelegate 上的核心数据堆栈已被解除分配。

有谁知道一个很好的例子,它遵循与在 Recipies、CoreData Books 和 Locations 上创建的设计模式不同的设计模式?所有这些都遵循相同的模式。

我要做的就是检索原始数据并在 chid tableview 中使用不同的标准进行排序。

4

3 回答 3

4

关于人们在这个问题中倾向于将 Core Data 堆栈放在哪里进行了重要的讨论。我倾向于将堆栈放在一个单例中(正如我在那里指出的那样)。这使您可以在应用程序中的任何需要的地方方便地访问堆栈。

就您的问题而言,我发现您的核心数据堆栈的元素极不可能被释放。一方面,你会在向你的上下文或模型发送消息时崩溃,而不是取回你现在的报告。如果您可以从应用程序中的其他位置访问“Song”实体,我敢打赌,您没有将模型或上下文正确地传递给需要它的实例。

于 2009-12-15T18:22:01.017 回答
1

IIRC Apple 示例在 App Delegate 中初始化核心数据堆栈,但它们实际上在视图控制器上设置属性以引用 ManagedObjectContext 并在应用程序加载时设置这些属性 - 我读到 Apple 的文档所指的是你应该做类似的事情而不是尝试直接从 App Delegate 加载 ManagedObjectContext。

如果您发布一些代码,那么帮助您找出错误的原因会容易得多。我要检查的第一件事是控制器中对 ManagedObjectContext 的引用不是零。

于 2009-12-15T16:04:51.860 回答
0

你在这里遇到的问题是因为你没有在你的对象模型中声明一个名为歌曲的实体......你所遵循的模式与它无关......我建议你在这里阅读核心数据和对象模型。希望对你有帮助

于 2009-12-15T16:04:41.733 回答