【发布时间】:2015-05-19 18:58:43
【问题描述】:
我正在使用 Realm 在不长的时间内进行缓存,并且无需在数据模型发生更改时跟上架构版本或进行迁移。
因此,我的应用程序如何通过删除默认领域并从头开始巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
【问题讨论】:
标签: ios swift realm realm-migration
我正在使用 Realm 在不长的时间内进行缓存,并且无需在数据模型发生更改时跟上架构版本或进行迁移。
因此,我的应用程序如何通过删除默认领域并从头开始巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
【问题讨论】:
标签: ios swift realm realm-migration
自从 Swift 2 引入 try/catch 以来,这对我来说一直很有吸引力。我只是在启动时从我的应用程序代表那里致电testRealmFile(),然后一切都很好。
func testRealmFile(){
do {
try Realm().objects(Model1)
try Realm().objects(Model2)
} catch {
print("can't access realm, migration needed")
deleteRealmFile()
}
}
func deleteRealmFile(){
if let path = Realm.Configuration.defaultConfiguration.path {
do{
try NSFileManager.defaultManager().removeItemAtPath(path)
print("realm file deleted")
} catch {
print("no realm file to delete")
}
}
}
【讨论】:
Realm 配置对象现在有一个名为 deleteRealmIfMigrationNeeded 的属性(在 Objective C 中也可用),如果设置为 true,如果需要迁移,将自动删除 Realm 数据库文件。
请注意,如果您有兴趣在删除数据库文件之前检查是否需要迁移(例如,如果您希望用户在删除之前确认),则可能需要其他方法。
【讨论】:
最简单的方法是检查Realm.schemaVersionAtPath(_:) 并查看该架构版本是否低于您当前的架构版本。您还可以关注https://github.com/realm/realm-cocoa/issues/1692,它建议添加更精确的 API(不需要更改架构版本的 API),以便您检测是否需要迁移。
【讨论】: