从多个类访问核心数据

Posted

技术标签:

【中文标题】从多个类访问核心数据【英文标题】:Access Core Data from multiple classes 【发布时间】:2014-08-06 01:47:25 【问题描述】:

我是第一次使用 Core Data,但我对一些事情感到困惑。

首先让我解释一下我的应用程序的上下文。它本质上是一个虚拟计划器,就像您在高中/中学时所拥有的那种,课程开始/结束的时间是孩子们应该写作业的地方。我正在尝试使用核心数据来保存大约 11,000 个这些周期对象并查询它们以获取给定日期的周期。

我遇到的问题是我在 AppDelegate 中初始化了 NSManagedObjectContextNSManagedDocument,以便在应用程序启动后立即加载句点。我现在想从不同的类(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 返回的对象

登录时多个用户访问的核心数据值(iOS Swift)

从众多实体中恢复一个获取的实体——核心数据

flutter firebase google登录以及如何从多个类访问

登录时由多个用户访问的核心数据值(iOS Swift)

如何从 Today Extensions(iOS 8) 访问核心数据详细信息?