美文网首页
[翻译] 手动设置 Core Data 栈

[翻译] 手动设置 Core Data 栈

作者: 张科_Zack | 来源:发表于2020-12-28 22:33 被阅读0次

    原创作者: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 的大部分交互都是使用这个上下文。传递这个上下文的引用到你的用户界面。查看 传递持久化容器的引用到一个视图控制器

    相关文章

      网友评论

          本文标题:[翻译] 手动设置 Core Data 栈

          本文链接:https://www.haomeiwen.com/subject/aqranktx.html