核心数据堆栈
这是核心数据堆栈的实现,如果在创建项目时使用 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
从持久性存储中获取对象时,可以将临时副本放在便笺簿上,它们形成对象图(或对象图的集合)。然后,你可以修改这些对象,除非你实际保存这些更改,但持久性存储保持不变。
必须使用托管对象上下文注册所有托管对象。你可以使用上下文将对象添加到对象图中,并从对象图中删除对象。上下文跟踪你所做的更改,包括单个对象的属性以及对象之间的关系。通过跟踪更改,上下文可以为你提供撤消和重做支持。它还确保了如果更改对象之间的关系,则可以保持对象图的完整性。
保存更改时,上下文可确保对象处于有效状态。更改将写入持久性存储(或多个存储),为你创建的对象添加新记录,并删除已删除对象的记录。