【发布时间】:2015-07-12 10:10:28
【问题描述】:
我在使用领域迁移块和迁移领域的策略时遇到了问题。
给定一个具有多个属性的对象 MyObject:
- 在版本 1 中,我们有属性 myProperty
- 在版本 2 中,我们将属性更改为 myPropertyMk2
- 在版本 3 中,我们将属性更改为 myPropertyMk3
鉴于以下迁移块:
private class func getMigrationBlock(realmPath: String) -> RLMMigrationBlock {
return { migration, oldSchemaVersion in
if (oldSchemaVersion == RLMNotVersioned) {
NSLog("No database found when migrating.")
return
} else {
NSLog("Migrating \(realmPath) from version \(oldSchemaVersion) to \(RealmMigrationHelper.CURRENT_DATABASE_VERSION)")
}
NSLog("Upgrading MyObject from version %d to %d", oldSchemaVersion, CURRENT_DATABASE_VERSION)
if (oldSchemaVersion < 2) {
migration.enumerateObjects(MyObject.className(), block: {
oldObject, newObject in
newObject["myPropertyMk2"] = oldObject["myProperty"]
})
}
if (oldSchemaVersion < 3) {
migration.enumerateObjects(MyObject.className(), block: {
oldObject, newObject in
newObject["myPropertyMk3"] = oldObject["myPropertyMk2"]
})
}
NSLog("Migration complete.")
}
}
当我是数据库的第 2 版时,它工作得很好(显然没有 oldSchemaVersion 块),但是当我引入第 3 版时,我开始遇到问题,因为它无法识别 oldSchemaVersion 块中的strong>newObject["myPropertyMk2"]。如果我将其更改为 newObject["myPropertyMk3"] 就可以了。
通过阅读 RLMMigration 代码,这非常有意义,因为我们使用旧的 schme 和新的方案,但基于 realm.io 上的文档,我认为这没有意义。那么我会期望它会少一些。
我有一个想法,即通过简单地使用字典,然后最终将此字典应用于 newObject,从而减少块内的方案迁移。
对于处理这个问题的领域迁移策略有什么想法吗?在领域网站上提到过,但只是非常简短。
谢谢你:)
【问题讨论】:
标签: realm