Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从Firebase检索图像_Ios_Swift_Firebase_Firebase Realtime Database_Firebase Storage - Fatal编程技术网

Ios 从Firebase检索图像

Ios 从Firebase检索图像,ios,swift,firebase,firebase-realtime-database,firebase-storage,Ios,Swift,Firebase,Firebase Realtime Database,Firebase Storage,应用程序已成功运行,但图像未显示在表格单元格中 let dbRef = FIRDatabase.database().reference().child("restaurants/restaurantImage") dbRef.observe(.childAdded, with: {(snapshot) in let downloadURL = snapshot.value as! String let storageRef = FIRStorage.st

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

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()
        }
    })

这些图像不会显示,因为在将任何图片附加到数组之前,您正在重新加载表视图。
数据(withMaxSize:
启动一个异步请求,该请求在您重新加载表视图后获得响应


如果您将
self.tableViewHongKong.reloadData()
移动到
数据(使用MaxSize:
响应块)中,您将在追加每个成功加载的图像后重新加载表视图。

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

您可以使用Glide,而不是编写所有代码来显示一个图像,它与Firebase配合得非常好,而且Firebase文档中也有详细的文档记录。请查看,当我开始使用它时,它让我的一切都变得轻松了很多