Realm AddOrUpdate一个带有对象列表的对象会覆盖后面的对象

时间:2018-01-02 17:40:51

标签: ios swift list realm

我有2个班级:

class RealmUser: Object {
    @objc dynamic var id: String = ""
    @objc dynamic var age: Int? = nil
    @objc dynamic var name: String? = nil
}

class Event: Object {
    @objc dynamic var id: String = ""
    @objc dynamic var name: String = ""
    let participants = List<RealmUser>()
}

让&#39;说我目前在DB中有

  • 用户1/18岁/&#34; Foo&#34;
  • 用户2/25岁/&#34; Bar&#34;

现在,当我从API收到一个包含最小用户代表的事件时,例如:

{
    event_id: 10,
    name: "Super Event",
    participants: [
        {
            user_id: 1,
            name: "Foo"
        },
        {
            user_id: 2,
            name: "New Bar"
        },
    ]
}

因此没有age,Realm将覆盖现有用户而不是合并数据。

我最终在数据库中的期望是更新完整的用户对象。

相反,变量age已重置为零,好像它没有被更新但是被覆盖。

我正在调用函数realm.add(parsedEvents, update: true)

1 个答案:

答案 0 :(得分:1)

Realm无法神奇地确定当您添加具有nil字段的对象时,您希望它忽略该字段而不是将其设置为nil

一种解决方案是使用realm.create(parsedEvents, update: true)并传递一个字典,该字典缺少您不想更新的密钥而不是传递给对象。