2016-12-29 3 views
0

Ich versuche Realm (mit Pods installiert). Ich verwende Swift 3 mit Xcode 8.1.Warum bekomme ich einen Wert durch KVC, aber nicht durch die Verwendung von Eigenschaften bei der Verwendung von Realm?

sieht Ihr Code wie this-

do { 
     let realm = try Realm() 
     let human = Human() 
     human.name = "Nikhil" 
     human.legs = 2 

     try realm.write { 
      realm.add(human) 
     } 

     let humans = realm.objects(Human.self) 
     for h in humans { 
      print("\(h.name)") //Here is breakpoint 
     } 
    } catch { 
     // 
    } 

Und das tue ich dann

(lldb) po h.name 
"" 


(lldb) po h.value(forKey: "name")! 
Nikhil 

Warum Eigenschaften nicht Werte zurückgegeben werden, aber ich kann durch value(forKey: Werte abrufen?

+0

LLDB sollte "po" -Eigenschaften direkt auf Realm-Modellen haben können; zumindest funktionierte es für mich mit Xcode 8.2 und Realm installiert mit CocoaPods. Können Sie versuchen, Ihre abgeleiteten Daten zu löschen und Ihren Build-Ordner zu bereinigen (Optionstaste + Produktmenü, dann 'Build-Ordner bereinigen ...')? Möglicherweise gibt es eine Art zwischengespeicherter Daten, die den Debugger nicht ordnungsgemäß funktionieren. – AustinZ

+1

Das liegt wahrscheinlich daran, dass die Eigenschaften des Modells nicht mit 'dynamic' deklariert sind. Ohne das Attribut 'dynamic' wird der Swift-Eigenschaftszugriff statischer Versand sein. Da Realm träge alle Werte lädt, benötigt es dynamisches Dispatching. Bitte beachten Sie unsere Cheatsheets zu den Modelldefinitionen https://realm.io/docs/swift/latest/#cheatsheet –

+0

@kishikawakatsumi Sie hatten Recht. Vielen Dank :) –

Antwort

0

Wie @kishikawa katsumi angegeben -

Klasseneigenschaften wie dynamic definiert werden sollte.

Ein großes Dankeschön an ihn für diesen Fehler.

Verwandte Themen