У меня есть случай, когда я сохраняю данные в базе данных 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 ()) данные в соответствии с моим пониманием, почему он отправляет мне меньшее количество данные иногда
Нет фильтра, применяемого к статическим методам getDataFromRealm () RealmManager при получении данных.
Предположим, что приведенный выше код переходит в состояние гонки, что происходит в приведенном ниже фрагменте кода
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)» в данные, которые, очевидно, занимают много времени.
Пожалуйста, помогите мне понять, почему это работает по-разному в вышеуказанных случаях ... Заранее спасибо