Я собираюсь сначала объяснить мои настройки, а затем мою проблему / потребность.Я использую 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) }
}
}