检测 Realm.io 数据库是否需要迁移 - 如果需要,销毁它
Detect if Realm.io db needs migration - if so, destroy it
我在短期内使用 Realm 进行缓存,无需跟上架构版本或在数据模型发生更改时随时迁移。
因此,我的应用程序如何通过取消默认 Realm 并从头开始来巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
最简单的方法是检查 Realm.schemaVersionAtPath(_:)
并查看该架构版本是否低于您当前的架构版本。您还可以按照 https://github.com/realm/realm-cocoa/issues/1692,它建议添加一个更精确的 API(一个不需要修改您的架构版本的版本)允许您检测是否需要迁移。
自从 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 Configuration 对象现在有一个名为 deleteRealmIfMigrationNeeded
的 属性(在 Objective C 中也可用)如果设置为 true
将自动删除 Realm 数据库文件需要迁移。
请注意,如果您有兴趣在删除数据库文件之前检查是否需要迁移(例如,如果您希望在删除之前进行用户确认),则可能需要其他方法。
我在短期内使用 Realm 进行缓存,无需跟上架构版本或在数据模型发生更改时随时迁移。
因此,我的应用程序如何通过取消默认 Realm 并从头开始来巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
最简单的方法是检查 Realm.schemaVersionAtPath(_:)
并查看该架构版本是否低于您当前的架构版本。您还可以按照 https://github.com/realm/realm-cocoa/issues/1692,它建议添加一个更精确的 API(一个不需要修改您的架构版本的版本)允许您检测是否需要迁移。
自从 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 Configuration 对象现在有一个名为 deleteRealmIfMigrationNeeded
的 属性(在 Objective C 中也可用)如果设置为 true
将自动删除 Realm 数据库文件需要迁移。
请注意,如果您有兴趣在删除数据库文件之前检查是否需要迁移(例如,如果您希望在删除之前进行用户确认),则可能需要其他方法。