2016-07-24 8 views
2

Nehmen wir an, ich habe:RealmSwift: So erstellen Sie To-One-Beziehungen richtig?

class Dog: Object { 
    dynamic var race = "" 
    dynamic var name = "" 

    override static func primaryKey() -> String? { 
     return "race" 
    } 
} 

class Person: Object { 
    dynamic var name = "" 
    dynamic var address = "" 
    dynamic var dog: Dog? 

    override static func primaryKey() -> String? { 
     return "name" 
    } 
} 

Zuerst habe ich eine Dog erstellen und speichern:

let dog = Dog() 
dog.race = "Dalmatian" 

try! realm.write { 
    realm.add(dog, update: true) 
} 

Jetzt erstelle ich eine Person in einer anderen Klasse. Die Dokumente sind bezüglich dieses Szenarios ziemlich unklar. erste Muss ich Änderungen für die Dog speichern, bevor die Beziehung zu schaffen ?:

let person = Person() 
person.name = "Jim" 

// retrieve dog from realm: 

if let dog = realm.objectForPrimaryKey(Dog.self, key: "Dalmatian") { 
    dog.name = "Rex" // Owner gives dog a new name 

    // Question: 
    // Saving changes to Rex: is this step neccessary? 
    try! realm.write { 
     realm.add(dog, update: true) 
    } 

    person.dog = dog 
} 

try! realm.write { 
    realm.add(person, update: true) 
} 

Antwort

2

Nein, und es wird ein Absturz

if let dog = realm.objectForPrimaryKey(Dog.self, key: "Dalmatian") { 
    dog.name = "Rex" // Owner gives dog a new name 

    person.dog = dog 
} 

verursachen, wenn Sie die dog aktualisieren wollen ‚s name, schreiben wie dies:

if let dog = realm.objectForPrimaryKey(Dog.self, key: "Dalmatian") { 

     try! realm.write({ 
      dog.name = "Rex" 
     }) 

     person.dog = dog 

    } 

mehr sehen: Realm.io/updating-objects

0

Sie können ein ganzes Objektdiagramm als nicht verwaltete Objekte einrichten und sie alle nach einem Aufruf beibehalten. Sie müssen also den Hund nicht zuerst anhalten und ihn erneut abrufen, um ihn in einer Beziehung verwenden zu können.

let dog = Dog() 
dog.race = "Dalmatian" 

let person = Person() 
person.name = "Jim" 
person.dog = dog 

try! realm.write { 
    realm.add(person, update: true) 
} 
+0

Bht manchmal das ist notwendig, weil ich sie in verschiedenen Klassen erstellen. – MJQZ1347