2016-11-12 4 views
0

Hier ist die Course Objekt Ich möchte mit Realm speichern:Realm Abfragen zurückgeben Wörterbücher anstelle von Objekten

class Course: Object { 

    var name: String = "" 
    var code: String = "" 
    var CRN: Int = 0 
    var capacity: Int = 0 
    var occupied: Int = 0 

    required init() { 
     super.init() 
    } 

    required init(realm: RLMRealm, schema: RLMObjectSchema) { 
     super.init(realm: realm, schema: schema) 
    } 

    required init(value: Any, schema: RLMSchema) { 
     super.init(value: value, schema: schema) 
    } 

} 

Hier ist, wie ich das Objekt in den Realm schreibe:

DispatchQueue.main.async { 
     try! self.realm.write { 
     self.realm.add(course) 
    } 
} 

Hier ist, wie ich lese das Objekt:

for course in realm.objects(Course.self) { 
    self.courses.append(course) 
    self.tableView.reloadData() 
} 

ich verwende einen configure Funktion ein UITableViewCell mit einem Course Objekt einzurichten:

func configure(withCourse course: Course) { 

    self.codeLabel.text = course.name 
    self.nameLabel.text = course.code 
} 

Allerdings bedeutet dies nichts.

Dies ist, was ich die UITableViewCell zu erhalten tun müssen, verwenden, um korrekt zu konfigurieren:

self.codeLabel.text = course.value(forKeyPath: "name") as! String? 
self.nameLabel.text = course.value(forKeyPath: "code") as! String? 

Wie kann ich seine Eigenschaften zugreifen, und nicht die Werte in einem Wörterbuch?

Antwort

3

Die Eigenschaften in der Modellklasse fehlt das dynamic Modifikator. Dieser Schlüssel ist erforderlich, um sicherzustellen, dass Realm die Möglichkeit hat, den Zugang zu den Eigenschaften abzufangen, Realm Gelegenheit zu geben, die Daten aus der Datei auf der Festplatte zu lesen/schreiben. diese Eigenschaften Weglassen führt zu den Swift-Compiler direkt die Instanzvariablen zugreifen, Realm aus der Schleife schneiden. Ihre Modellklasse sollte aussehen wie:

class Course: Object { 
    dynamic var name: String = "" 
    dynamic var code: String = "" 
    dynamic var CRN: Int = 0 
    dynamic var capacity: Int = 0 
    dynamic var occupied: Int = 0 
} 

Keine der verschiedenen init-Methoden in Ihrem Code-Schnipsel erscheint notwendig, entweder zu sein.

Verwandte Themen