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

标签 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>()
}

假设我目前在数据库中有

  • 用户 1/18 岁/“Foo”
  • 用户 2/25 岁/“酒吧”

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

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

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

我最后在 DB 中期望的是更新完整的用户对象。

相反,变量 age 已重置为 nil,就好像它没有更新但被覆盖了一样。

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

最佳答案

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

一个解决方案是改为使用 realm.create(parsedEvents, update: true) 并向其传递一个缺少您不想更新的键的字典,而不是向其传递一个对象.

关于ios - Realm AddOrUpdate 一个带有对象列表的对象覆盖后面的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065440/

相关文章:

ios - UIAlertController 的后续演示出现卡顿

javascript - Safari(移动)IOS - 在外部单击时输入不会失去焦点

iphone - run loop/drawRect 中神秘的 "progressive slowing"问题

ios - 如何让 DidSelectRow 激活键盘?

swift - 更改导航栏项目位置

java - 列表中的调用长度和列表的特定项目

ios - 苹果会批准没有应用程序图标的应用程序进行 Beta 测试吗?

ios - 如何将 'FIRDataSnapshot' 转换为 NSString 和 NSDict

java - JSP 和 Java - 使用 jslt forEach 在 JSP 中显示数据 - 如何访问较低的元素

c - 在 C 中对递增列表进行排序