我正在尝试为我的模型文件中的某个属性执行数据类型的迁移。
我发现的来源主要是指导如果列名更改或将列合并为一个如何迁移。
这是我编译应用程序时收到的错误消息。
由于未捕获的异常终止应用' RLMException',原因: '由于以下错误,需要迁移: - ' has_completed_profile'的属性类型财产不匹配。旧类型' bool',新类型' int'
我使用的是最新版本0.99.0
答案 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)