防止List的父项覆盖单个Realm对象

时间:2019-02-17 14:48:34

标签: ios swift realm objectmapper realm-objectmapper

我将首先解释我的设置,然后再解释我的问题/需求。 我正在使用Realm + ObjectMapper + Alamofire存储一些对象以供离线使用。

我有一个getFriends请求,该请求获取一个 Full UserObject列表,然后一个feed请求,该列表获取GroupObject,相应地,在其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,因此覆盖了我的currents对象。

我已经了解了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) }

    }

}

0 个答案:

没有答案