Сохранение realmswift после удобной инициализации

Я получаю информацию о пользователе из api, создаю объект области, а затем хочу сохранить ее в области. Проблема в том, что он не обновляет пользователя. У меня есть класс Manager для работы с областью. Внутри этого класса я создаю свою переменную Realm, которую использую каждый раз, когда мне нужно читать или писать:

let myrealm = try! Realm()

затем внутри функции я делаю:

let rmUser = RMUser(id:1, code:"ewi39", ...) //init
//here, for example, rmUser.code = "ewi39"
try! myrealm.write {
    myrealm.add(rmUser, update:true)
}
//here rmUser.code = "" , which was the value of the already stored user.

Есть идеи, почему? У меня есть несколько удобных init в RMUser, вот тот, который я использую здесь:

convenience init(id:Int, code:String, ...) {
    self.init()
    self.id = id
    self.code = code
    ...
}

Довольно странно (для меня) то, что если я не вызываю инициализатор, а просто назначаю переменные «вручную», он работает правильно:

let rmUser = RMUser()
rmUser.id = id
rmUser.code = code
//here, for example, rmUser.code = "ewi39"
try myrealm.write {
    myrealm.add(rmUser, update:true)
}
//here rmUser.code is "ewi39" as should be

Ваш второй пример также отправляется в основной поток асинхронно? Как / где вы проверяете, прошла ли транзакция записи успешно или нет? Кстати, если вы хотите сохранить глобальную ссылку на ваш Realm (что я действительно не советовал бы делать), вам следует создать выделенный DispatchQueue и удобные методы для доступа к глобальной ссылке Realm из этой очереди синхронно / асинхронно, а не всегда обращаться к ней в асинхронным образом из основного потока.

Dávid Pásztor 11.04.2018 13:04

@ DávidPásztor, спасибо, я отредактировал вопрос, удалил асинхронность, так как проблема была не в этом, я также добавил попробовать! поскольку мой код был своего рода примером, я действительно обнаружил ошибку, но при записи ошибки нет. Кроме того, myrealm не был глобальным, это переменная класса Manager.

Andrea.Ferrando 11.04.2018 17:44
0
2
88
0

Другие вопросы по теме