我将首先解释我的设置,然后再解释我的问题/需求。 我正在使用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) }
}
}