从多个类访问核心数据
Posted
技术标签:
【中文标题】从多个类访问核心数据【英文标题】:Access Core Data from multiple classes 【发布时间】:2014-08-06 01:47:25 【问题描述】:我是第一次使用 Core Data,但我对一些事情感到困惑。
首先让我解释一下我的应用程序的上下文。它本质上是一个虚拟计划器,就像您在高中/中学时所拥有的那种,课程开始/结束的时间是孩子们应该写作业的地方。我正在尝试使用核心数据来保存大约 11,000 个这些周期对象并查询它们以获取给定日期的周期。
我遇到的问题是我在 AppDelegate 中初始化了 NSManagedObjectContext
和 NSManagedDocument
,以便在应用程序启动后立即加载句点。我现在想从不同的类(DayView)查询核心数据中的那些周期对象。如何从 DayView.m 创建对 Core Data 数据库的引用以便查询它? [alloc init]
AppDelegate 的一个实例对我来说似乎很奇怪,以便访问我为 NSManagedObjectContext
拥有的属性。
感谢您的所有帮助,我很乐意澄清 cmets 中的任何内容。
【问题讨论】:
【参考方案1】:不要在您的应用程序委托中这样做。它被称为应用程序委托,因为它应该完全执行作为UIApplication
委托所涉及的那些事情。如果您不使用情节提要,它实际上不应该做的只是启动第一个视图控制器,可能选择恢复 UI 状态,并处理分发到达委托的推送通知令牌之类的事情。
将您的核心数据内容分解到自己的类中。让其他人通过该课程进行交谈。 The singleton pattern 是一种常见的方法,可以防止你不得不在整个地方传递该类的实例,如果这是一个简单的设计事实,那就是只有一个。
【讨论】:
【参考方案2】:这样做的首选方法是在第一次需要或在应用程序启动时创建 NSManagedObjectContext(及其依赖项)。
NSManagedObjectContext 然后传递到第一个视图控制器,然后再传递给后续的视图控制器。这就是 Xcode Core Data 模板所做的事情,并且是执行此操作的首选方式。
Core Data Programming Guide、Core Data Snippets 和 Core Data Release Notes for MacOS 10.7 and ios 5 对此进行了介绍。在这三个来源中,发行说明文档是最新的。来自发行说明:
嵌套上下文比以往任何时候都更重要的是,您采用“传递接力棒”方法来访问上下文(通过将上下文从一个视图控制器传递到下一个视图控制器)而不是直接从应用程序委托中检索它。
(是的,您应该使用嵌套上下文。)
【讨论】:
【参考方案3】:您不分配它的实例;您可以使用
访问 App Delegate 及其属性 [UIApplication sharedApplication] delegate]
但我建议您省去一些麻烦,并创建一个包含所有核心数据内容的数据帮助器类。它可以在 App Delegate 中初始化,然后根据需要从那里引用。我用这个:
dataHelper = [(AppDelegate *)[[UIApplication sharedApplication] delegate] dataHelper];
然后让 dataHelper 拥有核心数据访问所需的所有代码。
【讨论】:
以上是关于从多个类访问核心数据的主要内容,如果未能解决你的问题,请参考以下文章
核心数据 - 访问从 fetch EXC_BAD_ACCESS 返回的对象