更新的核心数据模型属性不可访问?

Posted

技术标签:

【中文标题】更新的核心数据模型属性不可访问?【英文标题】:Updated Core Data Model Attributes Not Accessible? 【发布时间】:2019-06-26 01:00:39 【问题描述】:

在创建数据模型的更新版本并且只向一个实体添加一些新属性后,我无法访问我的 swift view controller 文件中的新属性。

在面向 ios 12 的 Xcode 10 中,我已将选定的 Core Data 模型更改为更新版本。据我了解,默认情况下已启用轻迁移。当我执行显示新属性的获取请求时,这似乎反映在我的控制台消息中。但是,我无法在我的视图控制器 swift 文件中访问代码中的新属性。我尝试在我的核心数据堆栈类 NSPersistantStoreDescription 中向 MigrateStoreAutomatically 和 InferMappingModuleAutomatically 添加“true”标志,但仍然无法访问代码中的新属性。

// ATTEMPT @ ENABLING LIGHT MIGRATION IN CORE DATA
    lazy var storeDescription: NSPersistentStoreDescription = 
        let description = NSPersistentStoreDescription()
        description.shouldMigrateStoreAutomatically = true
        description.shouldInferMappingModelAutomatically = false
        return description
    ()

    lazy var persistentContainer: NSPersistentContainer = 

        let container = NSPersistentContainer(name: "123ABC")

        container.loadPersistentStores(completionHandler:  (storeDescription, error) in

            if let error = error as NSError? 
                fatalError("Unresolved error \(error), \(error.userInfo)")
        
    )
        return container
()



// CODE IN SWIFT VIEW CONTROLLER TRYING TO ACCESS NEW ATTRIBUTE
    var selectedTextPhrase: TextPhrase!

        self.selectedTextPhrase.imageURL = "WHAT HAPPENED TO MIGRATION?"
        self.selectedTextPhrase.favorite = true

'TextPhrase?' 类型的值has no member 'imageURL' 是我收到的消息。

“imageURL”是我添加到实体的一个新的可选属性,它是一个字符串。 “favorite”属性是一个布尔值,是先前 Core Data 模型版本中预先存在的属性。我能够访问“最喜欢的”属性而不是“imageURL”。键入代码时,“imageURL”不会像原始 Core Data 模型中实体的原始属性那样出现自动完成选项。

【问题讨论】:

实体的Codegen设置是什么? 它被设置为 Swift。 【参考方案1】:

我发现了这个问题。在我向现有实体添加新属性后,在 Xcode 中为我的每个实体创建的 Swift 文件没有更新。我手动编辑了文件并为我的新属性添加了声明,现在它可以按预期工作。希望这可以为处于相同情况的其他人节省一些挫折和时间。

【讨论】:

以上是关于更新的核心数据模型属性不可访问?的主要内容,如果未能解决你的问题,请参考以下文章

更新了核心数据模型,没有新版本,如何修复?

如何让单元测试访问核心数据模型

更新核心数据模型后出错 - 无法识别的选择器发送到实例

核心数据模型版本控制和数据迁移

ASP.NET 核心模型验证无法按预期工作

映射核心数据模型属性类型