我想知道我的代码是否存在问题,因为从Firebase(Firebase中的网址)加载的图像几乎有一半时间不会显示来自Firebase的正确照片。 我从我的collectionView中向您展示了两个截图: - 首先这个案例是加载的正确照片:(在这种情况下没有错误),这就是我想要每次显示的内容
如果我再次重新加载,此问题可能会再次出现或在正确的位置显示正确的照片。 所以我不知道为什么会这个问题。
您可以在这里看到我的codeView的cellRowItemAt函数的代码:
select distinct group_concat(preferred_color)
from my_table
group by person_id
我的代码出了什么问题? 谢谢你的帮助。
编辑:我应该在prepareForReuse()函数中写什么:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
let photoLive = liveRecent[indexPath.row].photoURL
self.storageRef.reference(forURL: photoLive!).getData(maxSize: 1 * 1024 * 1024) { (imgData, error) in
if let error = error {
let alertView = UIAlertView(title: "Error", message: error.localizedDescription, delegate: nil, cancelButtonTitle: "OK")
alertView.show()
} else {
DispatchQueue.main.async(execute: {
if let data = imgData {
cell.imageViewUn.image = UIImage(data: data)
}
})
DispatchQueue.main.async {
cell.imageViewUn.reloadInputViews()
}
}
}
return cell
}
答案 0 :(得分:0)
问题最有可能发生,因为集合视图单元格中图像的设置与该单元格的生命周期分离。在单元格中设置图像时,您不知道该单元格是否仍然有效,或者是否已将其重新用于其他单元格。您需要能够在重复使用单元格时取消图像加载,或者在单元格索引中存储单元格索引,并在加载图像后检查索引是否已更改。
可以用来捕获单元格重用时的有用函数是
UICollectionReusable.prepareForReuse().
在您的单元格类中覆盖它并添加代码以取消图像加载或以某种方式使其无效。