【问题标题】:Realm: While writing a new object, how can I avoid creating an object for a relation?Realm:在编写新对象时,如何避免为关系创建对象?
【发布时间】:2016-07-17 06:39:03
【问题描述】:

在 Realm 中,创建新对象而不为其中一个关系创建新对象的正确方法是什么?

假设我有对象 PersonJob 实体一对一的关系。

我的代码首先写入 10 个 Jobs 对象,然后使用之前创建的对象创建另外 10 个 Person 对象。

由于Person 之前不存在,update 的标志为 false。

realm.add(person, update: false)

但由于 Job 对象已经存在,它会抛出以下异常:

由于未捕获的异常“RLMException”而终止应用程序。“无法设置 主键属性 '' 到现有值 ''。'

【问题讨论】:

  • 错误消息听起来像 iOS,所以我不确定,但您应该尝试重新使用 RealmObject 的 分离 实例。
  • @EpicPandaForce 你能发个例子吗?
  • 这很令人困惑。您甚至在模型定义中使用主键吗?
  • 你能展示你的类定义代码和你创建对象并将它们添加到领域的部分吗?

标签: ios swift realm


【解决方案1】:

您似乎正在尝试使用主键定义一个 Realm 对象,但您没有修改键值。

例如:

class User: Object {
  dynamic var user    = ""
  dynamic var year    = ""
  dynamic var id      = ""
  dynamic var workouts = 0

  override static func primaryKey() -> String? {
    return "id"
  }
}

如果您不设置id 值,您将收到以下消息:

由于未捕获的异常“RLMException”而终止应用程序。“无法将主键属性“”设置为现有值“”。”

有几种方法可以解决:

  1. 不要使用主键 (not really recommended)
  2. 确保在创建Object 时设置id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多