繁体   English   中英

从Firebase检索图像

[英]Retrieving Image From Firebase

该应用程序成功运行,但是该图像未显示在表格单元格中。

let dbRef = FIRDatabase.database().reference().child("restaurants/restaurantImage")
    dbRef.observe(.childAdded, with: {(snapshot) in
        let downloadURL = snapshot.value as! String
        let storageRef = FIRStorage.storage().reference(forURL: downloadURL)
        storageRef.data(withMaxSize: 10 * 1024 * 1024) { (data, error) -> Void in
            let pic = UIImage(data: data!)
            self.picArray.append(pic!)

        }
        self.tableViewHongKong.reloadData()
    })

您应该将self.tableViewHongKong.reloadData()移到完成处理程序中。 使用当前代码,您需要在异步功能完成之前重新加载表。

除非您100%确保实际返回数据并且UIImage初始化成功,否则不要强行解包。

let dbRef = FIRDatabase.database().reference().child("restaurants/restaurantImage")
    dbRef.observe(.childAdded, with: {(snapshot) in
        let downloadURL = snapshot.value as! String
        let storageRef = FIRStorage.storage().reference(forURL: downloadURL)
        storageRef.data(withMaxSize: 10 * 1024 * 1024) { (data, error) -> Void in
            guard let imageData = data, let pic = UIImage(data: imageData) else { return }
            self.picArray.append(pic)
            self.tableViewHongKong.reloadData()
        }
    })

该图像未出现,因为在将任何图片添加到数组之前您正在重新加载表格视图。 data(withMaxSize:启动一个异步请求,该请求在重新加载表视图后将获得响应。

如果将self.tableViewHongKong.reloadData()移到data(withMaxSize:响应块self.tableViewHongKong.reloadData()内,则在追加每个成功加载的图像后,将重新加载表视图。

即使Callam已经回答了您的问题,我仍然在发布此消息,因为这可能是更好的解决方法。

您可以使用Glide与Firebase搭配使用,并且在Firebase Docs中有很好的文档说明,而不必编写所有代码仅显示一个图像。 检查一下,当我开始使用它时,它对我来说使一切变得容易得多。

https://firebase.google.com/docs/storage/android/download-files#downloading_images_with_firebaseui

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM