领域属性的数据类型迁移

时间:2016-04-25 11:25:58

标签: objective-c realm

我正在尝试为我的模型文件中的某个属性执行数据类型的迁移。

我发现的来源主要是指导如果列名更改或将列合并为一个如何迁移。

这是我编译应用程序时收到的错误消息。

  

由于未捕获的异常终止应用' RLMException',原因:   '由于以下错误,需要迁移:    - ' has_completed_profile'的属性类型财产不匹配。旧类型' bool',新类型' int'

我使用的是最新版本0.99.0

1 个答案:

答案 0 :(得分:6)

首先,在更改模型类的定义时,应该增加模式版本。

然后,如果您使用新数据架构保留旧数据,则应将旧数据迁移到 迁移块中的新模式。

例如:

// Schema version 0
class TestObject: Object {
    dynamic var name = "Test"
    dynamic var has_completed_profile = false
}

// Schema version 1
class TestObject: Object {
    dynamic var name = "Test"
    dynamic var has_completed_profile = 5
}

如果您将列时间Bool更改为Int,并且您希望保留旧数据,则应编写迁移块,如下所示:

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { (migration, oldSchemaVersion) in
    if oldSchemaVersion < 1 {
        migration.enumerate(TestObject.className(), { (oldObject, newObject) in
            // Migrate old column to new column
            // If there is no compatibility between two types
            // (e.g. String to Int)
            // you should also write converting the value.
            newObject!["has_completed_profile"] = oldObject!["has_completed_profile"]
        })
    }
})
let realm = try! Realm(configuration: config)