Я загрузил изображение в firebase-storage и сохранил downloadURL в паре ключ / значение внутри моей базы данных.Я написал код, который должен отображать изображение (я) внутри collectionView, после того, как данные были получены, если URL-адрес действителен.Код выполняется в cellForItemAt, поскольку collectionView, содержащий изображения, встроен в другой collectionView (который будет называться Main или MainCV для предотвращения путаницы).
Чтобы решить проблему, я попытался перезагрузить коллекциюпросматривать данные внутри MainCV, а также пытаться протестировать код на контроллере представления только с помощью ImageView (не успешно).
// function to display images
private func icon(_ imageURL: String) -> UIImage {
//print("imageURL is \(imageURL)")
let url = URL(string: imageURL)
var image: UIImage?
var imageData:Data?
if url == nil {
print("URL is \(imageURL)")
return #imageLiteral(resourceName: "ic_person_outline_white_2x")
} else {
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print("error")
return
}
DispatchQueue.main.async {
imageData = data
image = UIImage(data: imageData!)
}
}.resume()
return image ?? #imageLiteral(resourceName: "ic_person_outline_white_2x")
}
}
Блок кода CellForItemAt
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! ImageCell
let imageOption = self.imageData[indexPath.row]
cell.iconImageView.image = icon(imageOption)
return cell
//imageData is an array with empty values that is populated with database values and subsequently reloaded
}
Предполагаемый результат, как я уже говорил ранее, состоит в отображении изображений из firebaseStorage внутри collectionView.Мой код не отображает никаких ошибок, но всегда возвращает изображение по умолчанию, а также печатает imageURl, который, как я подтвердил, является точным http для изображения, которое я пытаюсь отобразить.