[英]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.