检测Realm.io数据库是否需要迁移 – 如果是的话,将其销毁

我使用Realm进行不太长期的caching,并且不需要跟上架构版本或随时迁移数据模型。

因此,随着数据模型的改变,我们的应用程序如何巧妙地处理这种差异,而不是通过吹走默认的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.schemaVersionAtPath(_:)并查看该模式版本是否低于您当前的模式版本。 您也可以关注https://github.com/realm/realm-cocoa/issues/1692 ,其中提出了添加一个更精确的API(不需要碰撞您的模式版本),使您可以检测是否迁移需要。

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

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