簡體   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