2017-08-24 123 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

相關問題