【问题标题】:RealmMigrationNeededException when adding RealmList<Int> (Kotlin)添加 RealmList<Int> 时出现 RealmMigrationNeededException (Kotlin)
【发布时间】:2017-12-22 10:48:35
【问题描述】:

我想将 primitive 列表添加到现有模型,但出现异常。
注意:这都是 it 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 添加到模型中的新字段来解决此问题,但我不确定该列表是否仍然可以为空/null。

将原始列表添加到模型的正确方法是什么?对此的正确迁移是什么?

【问题讨论】:

  • 你使用什么版本的 Realm?
  • 您可以尝试Int::class.javaPrimitiveType),尽管考虑到这是RealmList&lt;Integer&gt;,您可能只想添加@Required。这只是意味着这个 RealmList 不能包含 null 作为值。

标签: android kotlin realm realm-migration


【解决方案1】:

其实你的迁移是正确的。如果您不希望列表能够包含null 作为值(考虑到它是RealmList&lt;Integer&gt;,其中Integer 可以为空),则应添加@Required 注释。

【讨论】:

  • 嗯,所以为了清楚起见(您的文字令人困惑):RealmList&lt;Int&gt; 不能 包含null,但一个带有Integer 的可以吗?如果我想使用这个 kotlin-non-null-type 我必须添加@Required?这对我来说很好。谢了。
  • 不,我的意思是 @Required 意味着您不能将 null 存储为整数
  • 混淆完成...以下是否正确?当使用Integer 时,我可以 使用null,但添加@Required 会阻止/使用Int(没有?)默认情况下不能使用null。对?但是当我不需要nulls时,为什么我在使用Int时需要@Require?是因为IntInteger 在Realm 中是相等的吗?那么当我想要非 null-int 值时,什么是正确的呢?
  • 对于原始的RealmList,需要指定是否可以将Null作为值存储在列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多