Запрет родительского объекта List для перезаписи отдельных объектов Realm - PullRequest
0 голосов
/ 17 февраля 2019

Я собираюсь сначала объяснить мои настройки, а затем мою проблему / потребность.Я использую Realm + ObjectMapper + Alamofire для хранения некоторых объектов для автономного использования.

У меня есть запрос getFriends, который выбирает список FULL UserObject с, а затем feed запрос, который выбирает GroupObject s, которые, в свою очередь, имеют в своем свойстве participants - PARTIAL объекты (некоторые свойства отсутствуют).

У меня есть:

public class GroupObject: Object, Mappable  {

    dynamic var id:                     Int                         = 0
    dynamic var name:                   String                      = ""
    var participants:                   List<UserObject>            = List<UserObject>()

    // MARK: - Lifecycle

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

    public func mapping(map: Map) {

        id                      <- (map["resource_id"], IntTransform())
        name                    <- (map["resource_name"], StringTransform())
        participants            <- (map["participants"], ListTransform<UserObject>())

    }

}

и UserObject (частичное представление):

public class UserObject: Object, Mappable  {

    dynamic var id:                     Int     = 0
    dynamic var firstName:              String  = ""
    dynamic var lastName:               String  = ""
    dynamic var state:                  Int     = Constants.UserInviteState.none.rawValue

Моя проблема заключается в том, что запрос getFriends правильно отображает пользователей.с правильным state и все.Но тут есть одна сложность: сервер отправляет частичные свойства для запроса feed и не отправляет свойство state, поэтому он сопоставляет его с .none, поэтому перезаписывает мой объект тока.

Я читал о функциях Realm create, но я пытался безрезультатно использовать его и не перезаписывать мои объекты.У кого-нибудь была эта проблема до сих пор?

РЕДАКТИРОВАТЬ: Я также пытался перезаписать настройку participants в вызове map, но у меня нет доступа к экземпляру realm (я имею в виду, яесть доступ, но это nil):


public func mapping(map: Map) {

    id                      <- (map["resource_id"], IntTransform())
    name                    <- (map["resource_name"], StringTransform())\

    if let participants = map["participants"].currentValue as? [[String: Any]] {

        participants.forEach { realm?.create(UserObject.self, value: $0, update: true) }

    }

}

...