我正在使用ObjectMapper从一些JSON填充我的Realm对象的属性。但是,只要didSet
更改remotePath
属性,就不会调用Mapper
。
这是我班级的精简版本(我刚刚删除了一堆属性以保持简洁)
class ImageFile: Object, Mappable {
dynamic var id = 0
dynamic var filename = ""
dynamic var remotepath = "" {
didSet {
self.filename = self.remotepath.isEmpty ? "x" : "z"
}
}
required convenience init?(map: Map) {
self.init()
}
override static func primaryKey() -> String? {
return "id"
}
func mapping(map: Map) {
remotepath <- map[“path"]
}
}
我这样调用它:
let file = ImageFile()
file.id = json["fileId"].int
// Map the properties
file.mapping(map: Map(mappingType: .fromJSON, JSON: json.dictionaryObject ?? [:]))
我已经尝试在didSet中放置一个断点以及打印只是为了查看它是否正在触发它不是/但是如果我检查数据库,我确实在remotepath属性中看到了正确的值,所以它是肯定被填补。
我知道didSet在init期间不会触发,但是我在init之后映射所以它应该触发?我已经检查过ObjectMapper上的github问题,并且人们使用了带有ObjectMapper的didSet,所以我显然错过了一些东西...
非常感谢任何帮助:)
注意:
filename
一个应该在didSet回调中设置的属性。答案 0 :(得分:1)
财产观察员不在Realm
个对象上工作。这是Realm的一个已知限制,因为Objective-C运行时中存在对象(因此是动态修饰符)。有关详细信息,请参阅this GitHub问题。您可以使用Realm
内置通知作为属性观察者的变通方法。