caiyue1993 / IceCream

Sync Realm Database with CloudKit
MIT License
1.93k stars 243 forks source link

一对多关系恢复问题 #248

Open huanglins opened 2 years ago

huanglins commented 2 years ago

我有一个类似于这样的一对多模型:

class Person: Object {
    @objc dynamic var id = NSUUID().uuidString
    @objc dynamic var name = "Jim"
    @objc dynamic var isDeleted = false

    let dogs = LinkingObjects(fromType: Dog.self, property: "owner")
}

class Dog: Object {
    @objc dynamic var id = NSUUID().uuidString
    @objc dynamic var name = ""
    @objc dynamic var owner: Person?
}

当我拉取全部数据到本地时,我应该通过设置 Dogowner 属性来恢复一对多的关系

realm.dynamicObject(ofType: ownerType, forPrimaryKey: primaryKeyValue)

但在一种情况下,如果在 Person 对象还没有写入到本地的时候,通过 dynamicObject 来获取 Person 对象是不存在的,就不能正确的恢复这个关系。

我查看了关于 list 这里关于解决关系恢复的问题,在单个对象属性设置的时候也应该需要相应的关系恢复逻辑。希望考虑解决一下。

wonderffee commented 2 years ago

According to plivesey 's reply in issue https://github.com/caiyue1993/IceCream/issues/140 , you may solve it by always resolving the sync objects in order, in other words, parents are always written first, followed by children. Also plivesey post his commit link in his own fork, see https://github.com/plivesey/IceCream/commit/24c2b84e1a0da8e7f2f3bf2c757d6d27b960da24 for more detail