问题描述
在我的iOS应用中使用RealmSwift时,如果用户跳过了一个或多个版本,则会遇到将已安装的领域架构迁移到当前架构版本的问题。
初始架构版本0:
// Schema Version 0
class ParentObject: Object {
@objc dynamic var child: Childobject!
}
class Childobject: Object {
@objc dynamic var name = ""
}
更改为版本1:
// Schema Version 1
class ParentObject: Object {
@objc dynamic var child: Childobject!
}
class Childobject: Object {
@objc dynamic var name = ""
@objc dynamic var isEnabled = false
}
更改为版本2:
// Schema Version 2
class ParentObject: Object {
@objc dynamic var child: Childobject!
@objc dynamic var isEnabled = false
}
class Childobject: Object {
@objc dynamic var name = ""
}
迁移块如下:
func migrationBlock(migration: Migration,oldSchemaVersion: UInt64) {
if oldSchemaVersion < 1 {
migration.enumerateObjects(ofType: "Childobject") { oldobject,newObject in
newObject!["isEnabled"] = Bool.random()
}
}
if oldSchemaVersion < 2 {
migration.enumerateObjects(ofType: "ParentObject") { oldobject,newObject in
if let child = oldobject!["child"] as? MigrationObject {
newObject["isEnabled"] = child["isEnabled"] as! Bool
}
}
}
}
如果已安装的架构版本为0,并且应用程序立即更新为2,则出现以下错误:
*** Terminating app due to uncaught exception 'RLMException',reason: 'Invalid property name 'isEnabled' for class 'Childobject'.'
我了解为什么会发生这种情况,但我想知道是否不能仅增量地添加新的迁移步骤?似乎对于每个模式更改,我都必须手动完成每个上一步,以检查是否可能不再起作用,这会使整个过程更容易出错。
我在android副本中具有相同的架构更改,但是由于必须在java / kotlin中手动对架构更改进行建模,因此这似乎不是问题。
处理此类情况的最佳实践是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)