2016-11-12 68 views
0

这里是Course对象我想用境界存储:境界查询返回的字典,而不是对象

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

} 

以下是我正在写对象的境界:

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函数来设置一个UITableViewCellCourse对象:

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方法都不似乎是必要的无论是。

相关问题