ObjectMapper не сериализует новые поля

У меня есть класс:

class ChatMessage: Object, Mappable {
    dynamic var fromId = ""
    dynamic var toId = ""
    dynamic var message = ""
    dynamic var fromName = ""
    dynamic var created: Int64 = 0



    required convenience init?(map: Map) {
        self.init()
    }

    func configure(_ fromId:String,toId:String, message:String) {
        self.fromId=fromId
        self.toId=toId
        self.message=message
        self.created = Int64((NSDate().timeIntervalSince1970 * 1000.0))

    }

    func mapping(map: Map) {
        created  <- map["created"] //a: this was added later
        fromId <- map["fromId"]
        toId <- map["toId"]
        message <- map["message"]
        fromName  <- map["fromName"]

    }
}

Я использую ObjectMapper для сериализации объекта в JSON и Realm, чтобы сохранить его в локальной базе данных. Я добавил поле created позже к сопоставлению, когда база данных Realm уже хранила объект ChatMessage.

Теперь, когда я создаю экземпляр объекта ChatMessage и пытаюсь преобразовать его в объект JSON, используя ObjectMapper. Ниже приведен код:

  func sendChatMessage(_ chatMessage:ChatMessage, callback: @escaping DataSentCallback) -> Void {
        var chatMessageString:String!

        let realm = DBManager.sharedInstance.myDB

        try! realm?.write {
            chatMessageString = Mapper().toJSONString(chatMessage, prettyPrint: false)!

        }
...
}

Теперь, когда я печатаю chatMessage, я получаю:

ChatMessage {
    fromId = 14;
    toId = 20;
    message = 2;
    fromName = ;
    created = 1477047392597;
}

И когда я печатаю chatMessageString, я получаю:

"{\"toId\":\"20\",\"message\":\"2\",\"fromName\":\"\",\"fromId\":\"14\"}"

Почему поле created не отображается в строке?


person vishalaksh    schedule 21.10.2016    source источник


Ответы (1)


Проблема заключалась в сопоставлении типа Int64, как указано в этой проблеме на github.

Изменив отображение created на следующую форму, все заработало нормально:

created  <- (map["created"], TransformOf<Int64, NSNumber>(fromJSON: { $0?.int64Value }, toJSON: { $0.map { NSNumber(value: $0) } }))
person vishalaksh    schedule 21.10.2016