中的CollectionView火力地堡存储的getData负荷图像无序
我一直在开发照片存储应用程序,会从我的火力地堡数据库中的图像链接,将它们存储在以一个数组,然后通过这个数组得到从图像中运行相应的Firebase存储使用阵列中的链接。中的CollectionView火力地堡存储的getData负荷图像无序
但是,即使代码按顺序通过链接运行,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异步的,基本上你的第一印象是第一加载,而不是在你的阵列顺序的第一个。首先由于网络的规模,网络质量,数据库的可用性等原因而加载。这就是为什么你让你的图像混乱。
我明白了。这就是我怀疑发生的事情。在获取下一张图像之前是否有任何方法可以等待第一张图像加载? –
你可以使用一个完成块,这里是一个例子:https://stackoverflow.com/questions/43388608/how-to-make-synchronous-operation-with-asynchronous-callback – Arrabidas92
而不是在这里下载图像在cellforrow与异步和它的更多信息请参阅此:https://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swift –