核心数据堆栈

这是核心数据堆栈的实现,如果在创建项目时使用 Core Data 创建项目,则最初将其放置在 AppDelegate 文件中。这些函数也可以在 CoreDataStack.swift 的单独类中实现。其中一个主要功能是获取 NSManagedObjectContext。

Objective-C

- (NSManagedObjectContext *)managedObjectContext {...}

Swift 2

lazy var managedObjectContext: NSManagedObjectContext = {...}

Swift 3

lazy var persistentContainer: NSPersistentContainer = {...)
let managedObjectContext = persistentContainer.viewContext

核心数据堆栈,用于在应用程序中的对象与外部数据存储之间进行通信。Core Data 堆栈处理与外部数据存储的所有交互,以便你的应用程序可以专注于其业务逻辑。堆栈由三个主要对象组成:托管对象上下文(NSManagedObjectContext),持久性存储协调器(NSPersistentStoreCoordinator)和托管对象模型(NSManagedObjectModel)。

NSManagedObjectModel

NSManagedObjectModel 实例描述了 Core Data 堆栈将要访问的数据。NSManagedObjectModel(通常称为 mom)作为创建堆栈的第一步加载到内存中。NSManagedObjectModel 的一个例子是 DataModel.momd。NSManagedObjectModel 定义了数据的结构

NSPersistentStoreCoordinator

NSPersistentStoreCoordinator 通过持久存储中的数据实现对象,并将这些对象传递给请求的 NSManagedObjectContext。它在模型中创建实体的新实例,并从持久存储中检索现有实例(NSPersistentStore)。NSPersistentStoreCoordinator 还验证数据是否处于与 NSManagedObjectModel 中的定义匹配的一致状态。

NSManagedObjectContext

从持久性存储中获取对象时,可以将临时副本放在便笺簿上,它们形成对象图(或对象图的集合)。然后,你可以修改这些对象,除非你实际保存这些更改,但持久性存储保持不变。

必须使用托管对象上下文注册所有托管对象。你可以使用上下文将对象添加到对象图中,并从对象图中删除对象。上下文跟踪你所做的更改,包括单个对象的属性以及对象之间的关系。通过跟踪更改,上下文可以为你提供撤消和重做支持。它还确保了如果更改对象之间的关系,则可以保持对象图的完整性。

保存更改时,上下文可确保对象处于有效状态。更改将写入持久性存储(或多个存储),为你创建的对象添加新记录,并删除已删除对象的记录。

来源: Apple 核心数据编程:初始化核心数据堆栈