Контекст
У меня проблемы с использованием метода realm.add(object, update: true)
подряд.
Я делаю WEB-запросы к своему API и тестирую случайгде интернет отключен.Когда запрос не удался и я получил ответ, я добавляю объект UnsynchronizedRequest
realm к Realm
.
Проблема
Я должен проверить случай, когда яЯ должен сделать множественный вызов моего API, поэтому я добавлю несколько UnsynchronizedRequest
объектов к Realm
.
Следующий веб-запрос я запускаю только тогда, когда получаю предыдущий ответ на запрос, поэтому запросы хорошо сцеплены, нет одновременных запросов.
Когда я делаю только один запрос и он не прошел, объект хорошо добавляется к Realm
.
Но когдаЯ делаю более одного запроса , только первый добавляется в Царство, а остальные не добавляются.
Что странно, когда яm используя точки останова , все объекты хорошо добавлены в область .Но когда я отключаю точки останова, только первый UnsynchronizedRequest
объект добавляется в Царство, другие игнорируются.
Я думаю, что это проблема с потоком write
,Док говорит, что он блокирует другой поток, если несколько записей выполняются одновременно, но я не знаю, как решить эту проблему.
Что я выполняю при сбое веб-запроса:
class func createUnsynchronizedRequest(withParameters parameters : Parameters, andRoute route : String){
print("Adding unsynchronized request to local...")
let failedRequest = UnsynchronizedRequest()
failedRequest.parameters = parameters
failedRequest.route = route
failedRequest.date = Date()
RealmManager.sharedInstance.addOrUpdate(object: failedRequest)
}
RealmManager.swift
func addOrUpdate(object : Object){
try! realm.write {
realm.add(object, update: true)
}
}
UnsynchronizedRequest.swift
@objcMembers class UnsynchronizedRequest : Object {
// MARK: - Realm Properties
override static func primaryKey() -> String? {
return "id"
}
dynamic var id = ""
dynamic var route = ""
dynamic var date : Date! {
didSet {
self.id = "\(self.date)"
}
}
}
Я уже пытался проверить, была ли область в транзакциив методе addOrUpdate
перед запуском realm.write
это не решило проблему.
Я также пытался отловить ошибку с помощью realm.write
, но ошибка не выдается.
Кроме того,если я выполню, например, 3 раза веб-запрос и т.д., который не будет выполнен, я уверен, что мой код выполняется, потому что print
in createUnsynchronizedRequest
работает.
Я действительно думаю, что это проблема сwrite threads
потому что, когда я использую точку останова для замедления выполнения кода, все работает хорошо.
Пример с 3 неудачными веб-запросами и ИСПОЛЬЗОВАНИЕМ ВЫКЛЮЧЕНИЙ :
Как вы можете видеть, используя точки останова, 3объекты хорошо добавляются в область:
Пример с теми же 3 неудачными веб-запросами и без прерываний :
Но теперь без точек останова в область добавляется только первый объект:
Есть идеи?