2017-08-24 125 views
0

我使用ObjectMapper从一些JSON填充我的Realm对象的属性。但似乎并没有调用remotePath属性由Mapper更改。Swift ObjectMapper not calling didSet

这里是我的类的下调版本(我刚刚删除了一堆的属性来保持我简洁)

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之后映射,所以它应该会触发?我检查GitHub的问题上ObjectMapper和人用didSet与ObjectMapper,所以我显然失去了一些东西......

任何帮助是极大的赞赏:)

注:

  • 所有这个对象的属性被填充,除了filename之外,它应该被设置在didSet回调中。
  • 有一个原因,我选择不映射的ID,只是忽略,只是为了清晰。
  • 我已经使用“x”和“z”作为文件名来测试它是否被触发,只是忽略了他们没有任何意义的事实,那不是问题所在。

回答

1

属性观察者不能在Realm对象上工作。这是Realm的一个已知限制,因为Objective-C运行时存在对象(因此是动态修改器)。有关更多详细信息,请参阅this GitHub问题。您可以使用内置通知中的Realm作为属性观察员的解决方法。

+1

谢谢Dávid(再次!)。 – TRG

相关问题