如何在Realm中使用“可解码”对象进行部分更新而不会丢失数据?

时间:2018-08-30 01:50:51

标签: swift realm decodable

我有一个JSON-API,它向我返回Courses的数组。 CoursesCourseLocationsCourseTypes等。它们都有主键。我认为最好使用Codable解析所有内容并使用Realm().add(_:update:)更新它。

一切正常。当API没有返回完整的对象时,就会出现问题。

说。 API“ /​​ types”返回下面的数组,并且包含创建或更新对象的所有必要数据。

[
   { "id": "1", "name": "Type 1", "sessions": 10, "sessionTime": 120.0 },
   { "id": "2", "name": "Type 2", "sessions": 5, "sessionTime": 20.0 }
]

但是随后我将另一个API方法称为“ / courses”,它向我返回课程信息以及对象“ types”,但不是全部,只是其idname

[
   {
     "id": "0013",
     "name": "Super cool course",
     "type": { "id": "2", "name": "Type 2" }
    }
]

因此,当我对课程进行“ add(_:update :)”时,实际上是更新CourseType对象的所有值,而不仅仅是名称。结果,我的sessionssessionTime属性设置为0。

如何避免呢?

这里是参考类。

class CourseType: Object, Decodable {
    @objc dynamic var identifier = UUID().uuidString
    @objc dynamic var name = ""
    @objc dynamic var sessions = 0
    @objc dynamic var sessionTime = 0.0

    private enum CodingKeys: String, CodingKey {
        case identifier = "id"
        case name
        case sessions
        case sessionTime = "session_time"
    }

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

0 个答案:

没有答案