检测 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 数据库文件需要迁移。

请注意,如果您有兴趣在删除数据库文件之前检查是否需要迁移(例如,如果您希望在删除之前进行用户确认),则可能需要其他方法。