2017-01-07 32 views
0

我想实现的一个字典创建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)

回答

1

LinkingObjects是一个查找机制,而不是在磁盘上存储的实际表示。因此,不可能通过写入事务向其中插入数据。

但是,如果重新设计架构,所以Person具有DogList一个对象,Dog本身定义LinkingObjects以确定其父母,那么你在相同的字典插入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>() 
} 
0

解决方法,我发现是分别创建实体。

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

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