2017-12-22 5 views
1

プリミティブリストを既存のモデルに追加したいが、例外が発生する。
注意:これはすべて行われますそれはKotlinです。ここでRealmListを追加するとRealmMigrationNeededExceptionが発生する<Int>(Kotlin)

は、モデルの:

open class Foo(
    @PrimaryKey var id: Int = 0 
) : RealmObject() 

今、私は次のフィールドを追加したい:

var idList: RealmList<Int> = RealmList() 

私が働いていた空白RealmList(とそれを初期化するので、これは空のリストかもしれません非プリミティブリストフィールドの場合)。

私の移行は次のようになります。

schema.get("Foo") 
     ?.addRealmListField("idList", Int::class.java) 

アプリを実行しているとき、私はRealmMigrationNeededExceptionを得る:

移行が原因、次のエラーのために必要とされています
- プロパティ ' Foo.idList 'はオプションになっています。


私はモデルに新しいフィールドに@Requiredを追加することによってこの問題を回避することができますが、私は、リストはまだヌル/空にすることができますかはわかりません。

プリミティブリストをモデルに追加する正しい方法は何ですか。これに対して正しい移行は何ですか?

+0

どのレルムのバージョンを使用しますか? – Mike

+0

これは 'RealmList 'で '@ Required'を追加したいと思うかもしれませんが、' Int :: class.javaPrimitiveType) 'を試すことができます。これは、RealmListが値として「null」を含むことができないことを意味します。 – EpicPandaForce

+0

javadocが更新されますhttps://github.com/realm/realm-java/pull/5646 – beeender

答えて

2

実際、移行は正しいです。リストにnull(値がRealmList<Integer>とすると、Integerがnullの場合がある)を含めることができないようにするには、@Requiredアノテーションを追加する必要があります。

+0

これを明確にするために(あなたのテキストは混乱しています): 'RealmList ' *は 'null'を含むことはできません'Integer'を持つものはできますか?そして、もし私がこのkotlin-non-null-type I *を使いたいのであれば、 '@ Required'を追加する必要がありますか?これは私にとっては大丈夫でしょう。 THX。 – hardysim

+0

いいえ、私は@値が整数としてnullを格納できないことを意味します。 – EpicPandaForce

+0

混乱が完了しました...以下は正しいですか? 'Integer'を使うとき、I *は' null'を使うことができますが、 '@ Required'を加えることでこれを防ぐことができます。' 'Int''('? 'なし)ではデフォルトで' null'を使うことはできません。右?しかし、 'nulls 'が欲しくない場合、' Int'を使うときに '@ Require'が必要なのはなぜですか?これは、 'Int'と' Integer'がRealmで等しいからですか?それでは、null以外の値を必要とするときはどうしたらいいですか? – hardysim

関連する問題