gpt4 book ai didi

ios - Firebase Storage getData 在 collectionView 中无序加载图像

转载 作者:行者123 更新时间:2023-11-30 11:59:59 24 4
gpt4 key购买 nike

我一直在开发一个照片存储应用,它从我的 Firebase 数据库获取图像链接,按顺序将它们存储在一个数组中,然后运行该数组,使用数组中的链接从相应的 Firebase 存储中获取图像.

但是,即使代码按顺序运行链接,函数 getData 也会乱序加载图像。我不确定为什么会发生这种情况,尽管我最初的想法是图像按大小顺序加载/加载时间最短。这是我的代码。

for link in Constants.officialLinksArray {
let storage = Storage.storage().reference(forURL: link)

// Download the data, assuming a max size of 1MB (you can change this as necessary)
storage.getData(maxSize: 10 * 1024 * 1024) { (data, error) -> Void in
// Create a UIImage, add it to the array
if let error = error {
print(error)
} else {
//print(self.imageCount)
let loadedImage = UIImage(data: data!)
self.photoArray.append(loadedImage!)
Constants.officialPhotoArray = self.photoArray
self.buttonArray.append(self.photoArray.count)
self.collectionView.reloadData()
//print(self.photoArray)

}

}
}

感谢任何帮助。谢谢!

最佳答案

关于为什么您的加载没有考虑数组顺序,我认为(但您需要检查)getData 方法是异步

意思是,当您循环访问链接数组时,您会告诉您使用给定的链接执行 getData 方法,但您的循环不会等到图像的第一次加载完成后才转到下一个链接。

为了说明我的目的,请在 else 语句(加载完成的地方)内进行打印,并在闭包外部但最后在循环内部进行另一个打印。我想您会看到一些关于代码执行的有趣行为。

总而言之,如果 getData 是异步的,基本上您获得的第一个图像是第一个加载的图像,而不是数组顺序中的第一个图像。首次加载是因为计算过程中网络的大小、质量、数据库的可用性等多种原因。这就是为什么你的图像会变得困惑。

关于ios - Firebase Storage getData 在 collectionView 中无序加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47363367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com