【问题标题】:Detect if Realm.io db needs migration - if so, destroy it检测 Realm.io db 是否需要迁移 - 如果是,则销毁它
【发布时间】:2015-05-19 18:58:43
【问题描述】:

我正在使用 Realm 在不长的时间内进行缓存,并且无需在数据模型发生更改时跟上架构版本或进行迁移。

因此,我的应用程序如何通过删除默认领域并从头开始巧妙地处理差异,而不是在数据模型发生更改时崩溃?

提前致谢!

【问题讨论】:

    标签: ios swift realm realm-migration


    【解决方案1】:

    自从 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")
            }
        }
    }
    

    【讨论】:

    • 我在 Swift + Objective C 项目中使用 RLMRealm。我怎样才能做到这一点?谢谢
    【解决方案2】:

    Realm 配置对象现在有一个名为 deleteRealmIfMigrationNeeded 的属性(在 Objective C 中也可用),如果设置为 true,如果需要迁移,将自动删除 Realm 数据库文件。

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

    【讨论】:

      【解决方案3】:

      最简单的方法是检查Realm.schemaVersionAtPath(_:) 并查看该架构版本是否低于您当前的架构版本。您还可以关注https://github.com/realm/realm-cocoa/issues/1692,它建议添加更精确的 API(不需要更改架构版本的 API),以便您检测是否需要迁移。

      【讨论】:

      • 是的,问题是我不想跟踪架构版本。但是你对那个 github 问题是正确的。我会顺着这条线,交叉手指。
      猜你喜欢
      • 2011-10-20
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多