2016-11-12 2 views
0

Вот Course объект, который я хочу сохранить с помощью Realm:Realm запросы возвращаются словари вместо объектов

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) 
    } 

} 

Вот как я пишу объект в Realm:

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

Вот как Я читаю объект:

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

Я использую configure функция создать UITableViewCell с Course объекта:

func configure(withCourse course: Course) { 

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

Однако это не делает ничего.

Это то, что я должен сделать, чтобы использовать, чтобы получить UITableViewCell правильно настроить:

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

Как получить доступ к его свойствам, а не значение в словаре?

ответ

3

В свойствах вашего модельного класса отсутствует модификатор dynamic. Этот модификатор необходим, чтобы гарантировать, что Realm имеет возможность перехватить доступ к свойствам, предоставляя Realm возможность читать/записывать данные из файла на диске. Опущение этих свойств приводит к тому, что компилятор Swift напрямую обращается к переменным экземпляра, вырезая Realm из цикла. Ваша модель класс должен выглядеть как:

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 
} 

Ни один из различных init методов, включенный в вашем фрагменте кода, как представляется, необходимо либо.

Смежные вопросы