4

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

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

提前致谢!

4

3 回答 3

3

自从 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")
        }
    }
}
于 2016-02-18T18:14:52.063 回答
1

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

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

于 2017-01-04T19:54:12.467 回答
0

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

于 2015-05-20T04:24:34.840 回答