从Firebase Realtime Database提取carname却返回全列表求助
问题原因与修复方案
你的代码存在两个核心问题,按下方说明调整即可实现需求:
- 你已经通过链式调用
.child("carname")直接定位到了目标字段所在的节点,此时snapshot返回的value本身就是carname对应的字符串值,不需要额外将其强转为字典类型再二次读取carname键,多余的类型转换会导致取值失败。 - 你将取到的字段值存入
post变量后,没有给预先声明的self.myyTitle赋值,就直接将self.myyTitle绑定到cell的文本控件,会导致文本展示为空。
修正后的参考代码如下:
ref?.child("users").child("photodetails").child(String(indexPath.item)).child("carname").getData { [self] (error,snapshot) in if let error = error { print("Error getting data \(error)") } else if snapshot.exists() { // 直接对snapshot.value做字符串类型转换即可 guard let carName = snapshot.value as? String else { return } print("Got carname: \(carName)") DispatchQueue.main.async { // 可直接赋值给cell文本,也可先赋值给self.myyTitle再使用 cell.myTitle.text = carName } } else { print("No data available") } } return cell
如果调整后控制台仍然返回完整数据列表,请检查String(indexPath.item)的取值是否和你数据库中对应节点的ID完全匹配,确保访问路径正确即可。
内容的提问来源于stack exchange,提问作者Muhammad Shaeel Abbas
相关产品推荐
相关产品推荐

