[翻译] 手动设置 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 的大部分交互都是使用这个上下文。传递这个上下文的引用到你的用户界面。查看 传递持久化容器的引用到一个视图控制器。