【问题标题】:Core Data, mom vs momd extension核心数据,妈妈与妈妈扩展
【发布时间】:2018-08-08 10:10:03
【问题描述】:

mom vs momd 扩展

在我的项目中,我使用momd 扩展从捆绑包中获取.xcdatamodel,一个月前它工作正常,但今天每次我尝试访问Core data 对象时它开始崩溃说modelURL nil in下面的代码

private lazy var managedObjectModel: NSManagedObjectModel = {
        guard let modelURL = Bundle.main.url(forResource: self.modelName, withExtension: "momd”) else {
            fatalError("Unable to Find Data Model URL")
        }

        guard let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL) else {
            fatalError("Unable to Load Data Model")
        }

        return managedObjectModel
}()

所以在查看this 问题后,在那个问题中,他使用mom 作为扩展,所以我将上面的代码更改为mom,现在它工作正常,但这是一个 6 岁的问题.所以我无法弄清楚这在我的项目中是如何突然成为一个问题的。 甚至苹果官方docs 使用momd 作为扩展。

以及如何确保哪个始终有效并仅使用它以及@yuji在那个问题中指出

获取 .mom(d) 文件并不是完全推荐的方式。 改用mergedModelFromBundles

那么这如何与单个 .xcdatamodel 一起工作

【问题讨论】:

  • modelUrl 为零?
  • 您是否考虑过改用NSPersistenContainer
  • 我有多个上下文,使用苹果默认的 persistentContainer 实现处理它们会让人感到困惑,它确实简化了,但在评论中他们写道 /*此属性是可选的,因为存在合法的错误条件可能会导致商店的创建失败。 */

标签: ios swift core-data bundle


【解决方案1】:

创建新模型时,默认情况下会获得两个文件:MyDataModel.momd 和嵌套的 MyDataModel.mom。

当您添加一个版本时,会创建另一个 mom 文件并将其添加到 momd 包中。

当您通过指向 momd 文件创建 NSManagedObjectModel 实例时,将使用当前版本(在检查器文件窗格中选择)。如果您需要访问模型的早期版本(例如迁移模型时),请指向 mom 文件。

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多