У меня есть случай, когда я сохраняю данные в базу данных Realm внутри Dispatch.global в фоновом потоке, а затем внутри того же потока я вызываю Dispatch.main.async для извлечения данных из Realm и обновления данных UITableView.
Проблема в том, что я получаю меньше данных (data.count). Предположим, что общее количество данных равно 10, тогда иногда я получаю все данные, а иногда и меньше 10.
Почему это происходит?
Ниже приведен пример фрагмента кода
func getData(data: [String]) {
DispatchQueue.global(qos: .background).async {
RealmManager.removeDataFromRealm()
RealmManager.saveDataToRealm(data)
Dispatch.main.async {
let dataFromRealm = RealmManager.getDataFromRealm()
self.sendDataToUI(dataFromRealm)
}
}
}
В приведенном выше коде removeDataFromRealm(), saveDataToRealm(data), getDataFromRealm() являются статическими функциями класса области, в которых я сохраняю, удаляю, получаю данные из базы данных области
Я отлаживаю код со всех аспектов, которые я понимаю, и он сохраняет (saveDataToRealm(data)) все данные, а затем извлекает (getDataFromRealm()) данные, согласно моему пониманию, тогда почему он иногда отправляет мне меньше данных
К статическим методам RealmManager getDataFromRealm() фильтр при выборке данных не применяется.
Предположим, что приведенный выше код переходит в состояние гонки, тогда что происходит в приведенном ниже фрагменте кода.
func getImageFromServer (url: URL) {
DispatchQueue.global(qos: .background).async {
do {
let data = try Data(contentsOf: url)
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
}
}catch {
print(error)
}
}
}
Поскольку getImageFromServer() сначала извлекает данные, затем выполняется Dispatch.main.async после преобразования «Data (contentsOf: url)» в данные, что, очевидно, требует времени.
Почему это работает по-разному в вышеуказанных случаях?
RealmManager.removeDataFromRealm
иRealmManager.saveDataToRealm
асинхронными или синхронными? - person rmaddy   schedule 16.11.2018