После обновления каталога товаров на сервере, приложение crash. Все дело в updateTime, но я не могу понять что с ней. Помогите )
При первой загрузке приложения у меня все прекрасно отрабатывает, и при повторной тоже. Но после обновления базы данных, приложение крашится. Я выяснил что причина в udateTime но я не могу понять что я делаю не так. Я Асинхронно подгружаю page и сохраняю их(все происходит одновременно) и все прекрасно работает до того момента пока не обновится Каталог товаров, что бы я заново его получил. И как раз при получении нового каталога приложение крашится с ошибкой 'Object has been deleted or invalidated.'
private var updateTime = 0
func fetchProducts(with group: DispatchGroup) {
let request = CatalogTradesRequest(page: self.page, checkUpdateTime: self.checkUpdateTime())
self.catalogService.fetchCatalogTrades(request) { [weak self] result in
switch result {
case .success(let response):
if response.updateTime != nil {
self?.updateTime = response.updateTime!
}
print("Time---1---- \(response.updateTime)" )
if response.add.count != 0 {
if (response.add.count + response.remove.count) == response.countByPage {
let updateTime = UserDefaultsWorker.fetchActiveCatalogUpdateTime()
DispatchQueue.init(label: "background", attributes: .concurrent).async {
autoreleasepool {
self?.worker?.writeToRealm(
with: CatalogTradesResponse(
add: response.add,
remove: response.remove,
updateTime: updateTime,
countByPage: nil),and: group)
}
}
self?.page += 1
self?.fetchProducts(with: group)
} else {
self?.worker?.writeToRealm(
with: CatalogTradesResponse(
add: response.add,
remove: response.remove,
updateTime: self?.updateTime,
countByPage: nil
),
and: group
)
print("exit")
group.leave()
UserDefaultsWorker.saveActiveCatalogUpdate(self?.updateTime?? 0)
}
} else {
group.leave()
}
case .failure(let error):
print("---\(String(describing: type(of: self))): Error in \(#function) - \(error.code) \(error.message)")
group.leave()
}
}
}
func checkUpdateTime() -> Int? {
let updateTime = UserDefaultsWorker.fetchActiveCatalogUpdateTime()
if updateTime != nil {
print(updateTime)
if updateTime == 0 {
return nil
} else {
return updateTime
}
} else {
return updateTime
}
}