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文档中也有详细的文档记录。请查看,当我开始使用它时,它让我的一切都变得轻松了很多