领域反向关系支持使用字典值创建

Realm inverse-relationships support for creation with a dictionary value

我想实现 Realm inverse-relationships 对创建字典的支持。

但是断言失败:没有创建字典中的狗。

import RealmSwift

class Dog: Object {
    dynamic var name: String?
    dynamic var owner: Person?
}

class Person: Object {
    dynamic var name: String?
    let dogs = LinkingObjects(fromType: Dog.self, property: "owner")
}

func sample() -> Person? {
    // Get the default Realm
    let realm = try? Realm()

    let sampleValue: [String: Any] = ["name": "Harry", "dogs": [["name": "Belle"]]]
    var person: Person? = nil
    try? realm?.write {
        person = realm?.create(Person.self, value: sampleValue, update: false)
    }

    assert(person?.dogs.isEmpty == false)

    return person
}

注意:RealmSwift (2.1.2)

我发现的解决方法是分别创建每个实体。

try? realm.write {
    person = realm.create(Person.self, value: sampleValue, update: false)
    let dogsValue = sampleValue["dogs"] as? [[String: Any]]
    dogsValue?.forEach {
        var dogValue = [=10=]
        dogValue["owner"] = person
        realm.create(Dog.self, value: dogValue, update: false)
    }
}

我希望有一些更简单的方法。

LinkingObjects 是一种查找机制,而不是 on-disk 商店的实际表示。因此,无法通过写入事务向其中插入数据。

但是,如果您重新设计架构,那么 PersonListDog objects,并且 Dog 本身定义了 LinkingObjects 来确定它的 parents,那么你在同一个字典中插入 PersonDog 的代码应该可以工作。 :)

class Dog: Object {
    dynamic var name: String?
    let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}

class Person: Object {
    dynamic var name: String?
    let dogs = List<Dog>()
}