Firebase存储getData在collectionView中无序加载图像

时间:2017-11-18 06:47:58

标签: ios swift firebase firebase-storage

我一直在开发一个照片存储应用,它可以从我的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)

        }

    }
}

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

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

意思是,当你遍历你的链接数组时,你告诉你用给定的链接执行getData方法,但你的循环不会等到你的图像第一次加载到下一个链接。

为了说明我的目的,在你的else语句中(在你的加载完成的地方)打印一个打印,在你的闭包之外打印另一个打印但在你的循环结束时打印。我想你会看到一些关于代码执行的有趣行为。

总而言之,如果getData是异步的,基本上你得到的第一个图像是第一个加载的,而不是数组顺序中的第一个。由于计算期间网络的大小,质量,数据库的可用性,首先加载,原因很多。这就是为什么你的图像无序。