2016-12-19 6 views
3

Ich habe ein seltsames Problem mit Objekten in Realm. Wenn ich ein Objekt aus der Realm-Datenbank hole, sind manchmal einige seiner Felder (es passiert nur bei RealmOptionals) nach dem Zugriff auf null.Realm Objektfelder sind null

Aber es ist wirklich komisch, wenn ich einen Haltepunkt vor dem Zugriff auf diese Felder setzen und ich po object.field auf lldb ausführen die Nil-Felder sind danach gegangen. Ich habe gesehen, dass ich vielleicht vergessen habe, diese Felder als 'dynamisch' zu setzen, aber in meinem Fall und nach der Realm-Dokumentation muss ich RealmOptional für optionale Boolesche Werte verwenden.

Weiß jemand, was ist das Problem hier?

Vielen Dank im Voraus.

EDIT: Die Methode, die ich verwendet, um von Realm abrufen und Objekt:

func getObject(atPosition position:Int)->Object{ 
     let objects = realm.objects(Object.self) 
     return objects[position] 
    } 

Antwort

2

Ich bin nicht ganz sicher, was Sie fragen. Wenn eine Realm-Eigenschaft als optional gekennzeichnet ist, wird der Anfangswert wie erwartet nil sein.

Sie haben richtig, dass Sie let propertyValue = RealmOptional<Bool>() anstelle von dynamic verwenden müssen, da normale boolesche Datentypen keinen Wert nil selbst ausdrücken können. Dies ist also eine Ausnahme von der dynamic Eigenschaftenregel.

Beachten Sie auch, was Sie brauchen optional.value zu verwenden, um einen optionalen Bool Wert zu setzen:

class Dog: Object { 
    dynamic var name = "" 
    dynamic var age = 0 
    let vaccinated = RealmOptional<Bool>() 
} 

let realm = try! Realm() 

let myDog = Dog() 
myDog.name = "Sherlock Bones" 
myDog.age = 4 
myDog.vaccinated.value = true 

try! realm.write { 
    realm.add(myDog) 
} 
+0

Ich habe nur beobachten, dass es nicht nur mit RealmOptional, sondern mit dynamischen Streichern zu. Ich habe die Frage mit einem Stück Code aktualisiert, wo ich ein Element aus Realm abrufe. Vielen Dank, TiM, dass Sie mir in beiden Fragen geholfen haben. Du und das Realm Team sind fantastisch! – kikettas

+0

Ich habe deine Antwort bearbeitet, weil du mich in die richtige Richtung gebracht hast. Vielen Dank für Ihre Zeit, ich schätze Ihre Hilfe. – kikettas