我正在使用 Realm 在不长的时间内进行缓存,并且无需在数据模型发生更改时跟上模式版本或迁移。
因此,我的应用程序如何通过删除默认领域并从头开始巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
我正在使用 Realm 在不长的时间内进行缓存,并且无需在数据模型发生更改时跟上模式版本或迁移。
因此,我的应用程序如何通过删除默认领域并从头开始巧妙地处理差异,而不是在数据模型发生更改时崩溃?
提前致谢!
自从 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.schemaVersionAtPath(_:)
并查看该架构版本是否低于您当前的架构版本。您还可以关注https://github.com/realm/realm-cocoa/issues/1692,它建议添加一个更精确的 API(一个不需要碰撞您的架构版本的 API),以便您检测是否会进行迁移必需的。