0
私のアプリでは、私たちの要素の1つに新しいプライマリキーを追加しました(これはかなり前です)。当然ながら、移行が必要でした。問題は、テストするのはかなり難しいです。だれも実際に何も言えず、最初にそれらのオブジェクトをどのように作成するのか(何らかの理由でintellijも答えを出しません)レルムの移行 - 新しいプライマリキーをintとして初期化
とにかく私の移行-code:
public class CustomMigration implements RealmMigration{
private int currentKey = 0;
public void migrate(DynamicRealm realm, long oldVersion, long newVersion){
RealmSchema schema = realm.getSchema();
if(oldVersion <= 4){}
if(schema.contains("AvailableCandidate"){
if(!schema.get("AvailableCandidate").hasField("pos")){
.addField("pos", int.class, FieldAttribute.PRIMARY_KEY)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.setInt("pos", currentKey++);
}
});
}
}
//
// here be more code
//
oldVersion = 5;
}
}
}
変数currentKey
に特に注意してください。私はその変換がイテレータのように動作し、currentKeyは変換が繰り返されるたびにインクリメントされるべきだと考えました。
問題は、まだそのバグを取得しているように見えますが、currentKeyは増分されていないようです。
この厄介な問題の解決方法は何ですか?
編集:布を吐き出すという例外は以下の通りです:
"pos" cannot be a primary key, it already contains duplicate values: 0
私はこれが起こる理由は全くわからないんだけど、[この例では、動作するようになっている](https://github.com/realm/realm-java/issues/3068#issue-162264733) – EpicPandaForce
私はPKタイプを変更していませんが、全く新しいタイプを追加しました。バグを経験しているユーザーがすでに部分的に移行を行っている可能性があり、したがってPKが0のエントリが1つありますか? – TormundThunderfist
ここで回避策を確認してくださいhttps://github.com/realm/realm-java/issues/2167#issuecomment-175442772これは文書化する必要があるものです... – beeender