【问题标题】:Swift Realm Property '*' has been added to latest object model MIGRATIONSwift Realm 属性“*”已添加到最新的对象模型迁移中
【发布时间】:2016-03-20 12:36:59
【问题描述】:

我在 RLMObject 中添加了新的数组属性,并且

public class Student: RLMObject {
    dynamic var id = 0
    dynamic var name = ""
    dynamic var resultList = RLMArray(objectClassName:Result.className())
}

public class Result: RLMObject {
}

错误日志:

由于以下原因,对象类型“学生”需要迁移 错误: - 属性“resultList”已添加到最新的对象模型中。

尝试失败:

let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration()

migration.enumerateObjects(Student.className()) { oldObject, newObject in
    newObject!["resultList"] = RLMArray(objectClassName: Result.className())
}

编辑:

  let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration()
    print("Realm db current version: \(configuration.schemaVersion)")
    configuration.schemaVersion = 1
    configuration.migrationBlock = {(migration:RLMMigration, oldSchemaVersion: UInt64) in
        print("Realm db migration start")
        if oldSchemaVersion < 1 {
            print("Schema version: 1 - Rename fields")
            migration.enumerateObjects(Student.className()) { oldObject, newObject in
                newObject!["creationDate"] = oldObject!["createdAt"]
                newObject!["modifiedDate"] = oldObject!["updatedAt"]
            }
        }
        print("Realm db migration finish")
    }
    RLMRealmConfiguration.setDefaultConfiguration(configuration)
    let realm = RLMRealm.defaultRealm()

解决方案:

将您的版本更新为 +1

configuration.schemaVersion += 1

【问题讨论】:

  • 你使用的 Realm 版本好像很旧?
  • migration 对象来自哪里?您是否对配置进行了任何更改?
  • @marius 更新了我的完整代码

标签: swift migration realm


【解决方案1】:

您必须增加您的schemaVersion 并在您的RLMRealmConfiguration 上提供migrationBlock。在那里你可以迁移表。但是在您的特定情况下,您不需要它。可以自动处理属性的添加。你仍然需要一个空块。

let config = RLMRealmConfiguration.defaultConfiguration()
config.schemaVersion = 1
config.migrationBlock = { (migration, oldSchemaVersion) in
    // nothing to do
}
RLMRealmConfiguration.setDefaultConfiguration(config)

【讨论】:

  • 谢谢@marius,编辑了我的完整代码..你能指出我的错误吗?
  • 请注意,下一次架构更改仅将 schemaVersion 增加 1 是不够的。它必须高于数据库中存储的版本,因此在其中存储一个绝对数字可能是有意义的。
  • 如果您仍处于开发阶段,您可能希望重置模拟器的内容和设置/删除您的应用程序并从头开始。如果您只需要担心实际部署的架构版本之间的迁移,这将变得容易得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多