从Firebase检索图像

时间:2017-06-07 13:22:54

标签: 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.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()
    })

3 个答案:

答案 0 :(得分:1)

您应该在完成处理程序中移动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()
        }
    })

答案 1 :(得分:0)

图像不会出现,因为您在将任何图片附加到阵列之前重新加载表格视图。 data(withMaxSize:启动一个异步请求,在您重新加载表视图后获取响应。

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

答案 2 :(得分:0)

即使Callam已经回答了你的问题,我仍然会发布这个问题,因为这可能是更好的方式。

您可以使用 Glide 而不是编写所有代码来显示一个图像,而这与Firebase的效果非常好,而Firebase文档中也有详细记录。检查一下,当我开始使用它时,它让我变得更容易。

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