私は Realm を使用してキャッシングを行っていますが、それほど長期間ではありません。データ モデルに変更があった場合でも、スキーマのバージョンを把握したり、移行したりする必要はありません。
では、データ モデルに変更があるたびにクラッシュするのではなく、デフォルトの Realm を吹き飛ばして最初からやり直すことで、アプリが不一致をスマートに処理するにはどうすればよいでしょうか?
前もって感謝します!
私は 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")
}
}
}
The simplest way is to check Realm.schemaVersionAtPath(_:)
and seeing if that schema version is lower than your current schema version. You can also follow https://github.com/realm/realm-cocoa/issues/1692, which proposes adding a more exact API (one that doesn't require bumping your schema version) allowing you to detect if a migration would be required.