[翻译] 手动设置 Core Data 栈

2020-12-28  本文已影响0人  张科_Zack

原创作者:Apple
原文链接: 手动设置 Core Data 栈
翻译:Zack

预览

NSPersistentContainer 是在 iOS 10.0+ 和 macOS10.12+ 被支持的。如果你正在部署一个较早的目标,你需要手动设置一个 NSManagedObjectModel 、一个 NSPersistentStoreCoordinator 以及 至少一个 NSManagedObjectContext 的实例。

创建一个被管理对象的模型

为了实例化一个 NSManagedObjectContext, 你传递一个 URL 指向 .xcdatamodeld 文件被编译的版本。这个 .momd 文件通常是应用包的一部分。

guard let modelURL = Bundle.main.url(forResource: "DataModel",
                                     withExtension: "momd") else {
    fatalError("Failed to find data model")
}
guard let mom = NSManagedObjectModel(contentsOf: modelURL) else {
    fatalError("Failed to create model from file: \(modelURL)")
}

创建一个持久化数据库协调器

接下来你传递已经加载好的 model 进入 NSPersistentCoordinator 的初始化方法去创建一个相关联的数据库协调器用 model

let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)

添加一个持久化数据库

如果你想 Core Data 去持久化你的数据模型到硬盘,告诉数据库协调器文件将放置在什么地方以及使用什么样的格式。

let dirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
let fileURL = URL(string: "DataModel.sql", relativeTo: dirURL)
do {
    try psc.addPersistentStore(ofType: NSSQLiteStoreType,
                               configurationName: nil,
                               at: fileURL, options: nil)
} catch {
    fatalError("Error configuring persistent store: \(error)")
}

每种可用数据库类型都有他们的优势和缺点。参考到 NSPersistentCoordinator 文档去查看每种数据库类型的详细信息。

创建被管理对象的上下文

创建一个 NSManagedObjectContext, 并且设置它的数据库协调器属性。

let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
moc.persistentStoreCoordinator = psc

你应用与 Core Data 的大部分交互都是使用这个上下文。传递这个上下文的引用到你的用户界面。查看 传递持久化容器的引用到一个视图控制器

上一篇下一篇

猜你喜欢

热点阅读