将新Object添加到Realm中的现有List

Pit*_*Pan 9 realm ios swift realm-list

我有两节课.首先看起来像这样:

class Person: Object {
    dynamic var owner: String?
    var dogs: List<Dogs>()
}
Run Code Online (Sandbox Code Playgroud)

和第二类看起来像这样:

class Dogs: Object {
    dynamic var name: String?
    dynamic var age: String?
}
Run Code Online (Sandbox Code Playgroud)

现在在ViewController'viewDidLoad'中我Person用空创建对象List并将其保存在Realm中

func viewDidLoad(){
    let person = Person()
    person.name = "Tomas"
    try! realm.write {
        realm.add(Person.self)
    }
}
Run Code Online (Sandbox Code Playgroud)

它的伟大工程,我能创造Person,当我尝试读取这个数据的问题开始SecondViewControllerViewDidLoad做这件事:

var persons: Results<Person>?

func viewDidLoad(){
    persons = try! realm.allObjects()
}
Run Code Online (Sandbox Code Playgroud)

并尝试新添加DogList按钮的动作做:

@IBAction func addDog(){
    let newDog = Dogs()
    newDog.name = "Rex"
    newDog.age = "2"

    persons[0].dogs.append(newDog)

    // in this place my application crashed

}
Run Code Online (Sandbox Code Playgroud)

在这里我的应用程序与信息崩溃:Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.我如何添加新的DogList,我怎么能更新人[0]?我使用SWIFT 3.0

bda*_*ash 9

所述persons属性的类型的Results<Person>,它是含有一个集合Person由一个域管理对象.为了修改托管对象的属性,例如将新元素附加到列表属性,您需要在写入事务中.

try! realm.write {
    persons[0].dogs.append(newDog)
}
Run Code Online (Sandbox Code Playgroud)