该应用程序成功运行,但图像未显示在表格单元格中。
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()
})
答案 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