Я пытаюсь загрузить изображения из хранилища Firebase для отображения в ячейках моей коллекции, но изображения продолжают появляться в случайном порядке в ячейках. Каждая ячейка имеет метку, полученную из хранилища базы данных (item1, item2 et c), которая каждый раз отображается в нужной ячейке. Изображения, хранящиеся в хранилище Firebase, имеют дочерний URL-адрес для хранения соответствующего имени элемента в базе данных Firebase.
Я успешно могу получить URL каждого изображения, загрузить все изображения и правильно отобразить их в ячейках, просто они продолжают появляться в случайном порядке каждый раз, когда я открываю приложение, так что изображение делает не соответствует названию предмета.
Я понимаю, что мне нужно асинхронно загружать изображения, поэтому каждое изображение завершает загрузку в нужной ячейке, прежде чем перейти к следующей, но у меня возникают проблемы при этом. Вот мой код на данный момент:
func downloadImg(completion: @escaping (UIImage?) -> ()) {
let ref = Database.database().reference().child("somePath")
ref.observeSingleEvent(of: .value) { (snapshot) in
for item in snapshot.children {
let snap = item as! DataSnapshot
let imageSnap = snap.childSnapshot(forPath: "img/storageUrl")
if let url = imageSnap.value as? String {
let someRef = self.storageRef.reference(forURL: url)
someRef.getData(maxSize: 10 * 10024 * 10024) { data, error in
if let error = error {
print(error)
} else {
let image = UIImage(data: data!)
DispatchQueue.main.async {
completion(image)
}
}
}
}
}
}
}
Затем я вызываю свою функцию в viewdidload:
downloadImg { (completion) in
self.itemPicArray.append(completion!)
self.collectionView?.reloadData()
}
Наконец я устанавливаю свой просмотр изображения ячейки на itemPicArray[indexPath.row]
Мне нравится Я сказал, что это работает отлично, за исключением того факта, что изображения продолжают появляться случайно. Помощь очень ценится!