2017-01-07 16 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) 
    } 
} 

我希望有一些更簡單的方法。