2016-04-15 14 views
0

マイグレーションのために複雑な状態で私が見つかった場合、RealmBrowserまたはコードを使用してRealmデータベースのバージョンを上書きする方法はありますか?レルムデータベースでスキーマバージョンを上書きする

私は問題を解決するために、カスタムワンタイム移行ブロックを書くためにconfig.schemaMigrationに、以前のバージョンを強制しようとした

にこれを行う方法がわから、それから、古いスキーマとテーブルを削除する必要はありませんが、レルムは開始時に不平を言う。 Realmが強制的にデータベースを開くようにする方法はありますか?

+0

バージョンと移行を指定する 'Realm.getInstance()'メソッドに設定を与えなければならず、バージョンは現在のものよりも高くなければなりません。 – EpicPandaForce

答えて

0

確かに、スキーマのバージョンをバンプして新しいバージョンの問題を修正することが最も安全です。それ以外の方法で行うと、ユーザーアプリを壊す可能性があります。

したい場合はしかし、あなたが移行をトリガーせずにレルムを開いて、そこにあなたの変更を行うことが私たちのダイナミックなAPIを使用することができます。https://realm.io/docs/java/latest/#dynamic-realms

その後、任意のクラスは、次のように行われる取り除く:

DynamicRealm realm = DynamicRealm.getInstance(config); 
realm.beginTransaction(); 
realm.getSchema().remove("TableName"); 
realm.commitTransaction(); 
realm.close(); 
+0

ありがとう! Swiftと同等のものはありますか? – oulipo

+0

Swiftでは、あなたのスキーマからクラスを削除してマイグレーションを実行し、['Migration.deleteData(_:)'](https://realm.io/docs/swift/latest/api/Classes/Migration .html#/ s:FC10RealmSwift9Migration10deleteDataFSSSb)を使用して、ファイルからそのクラスを完全にクリーンアップします。その後、[Realm.writeCopyToPath(_:encryptionKey:) '](https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm15writeCopyToPathFzTSS13encryptionKeyGSqCSo6NSData__T_)を使用すると、スキーマバージョンが「0」の新しいレルムファイル。次に、新しいファイルに必要なスキーマバージョンを設定します。 – jpsim

関連する問題