arrays - 将 Firestore 数据加载到表视图 Swift 4
问题描述
我有一个与将数据从 Firestore 加载到表视图有关的问题。基本上,我知道该怎么做,但是在这种情况下,如果 Firestore 的结构如下所示,我会感到困惑:
“基金”->“randomId”->“agensi:id”
我能够从“WJ18kBvDLhVrvml2slXB”集合中加载agensi。要获得真正的 agensi 名称,我必须从集合“Agensi”中获取数据,如下图所示:
下面是我已经做过的代码:
var agencyname: [String] = []
func getData() {
db.collection("fund").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
// var agencyNumber = 0
for document in querySnapshot!.documents {
let data = document.data()
let agency = data["agensi"] as? String ?? ""
let agencyId = document.documentID
print(agency)
print(agencyId)
//MARK get name
let newdocRef = Firestore.firestore().document("Agensi/\(agency)")
newdocRef.getDocument { (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
let dataDetails = docSnapshot.data()
let agencyNew = dataDetails!["name"] as? String ?? ""
self.agencyname.append(agencyNew)
print("List of the agency: \(self.agencyname.append(agencyNew))")
}
}
self.tableView.reloadData()
}
}
}
我尝试打印:
self.agencyname.append(agencyNew)
但它什么也没显示。所以,我无法将代理机构的名称加载到我的表格视图单元格中。顺便说一句对不起我的英语不好。提前致谢
解决方案
有几件事我想说:
1. FireStore
查询是异步的,所以当它完成时有一个回调函数。重新加载您的tableView
内部回调而不是循环结束,然后它将正确加载数据。
DispatchQueue.main.async {
self.tableView.reloadData()
}
将上面的代码写在行的下方print("List of the agency: \(self.agencyname.append(agencyNew))")
。
2.你正在打印"self.agencyname.append(agencyNew)"
,void
顺便说一句,所以不会打印任何东西print(\(self.agencyname))
。
3.guard
在 a中使用 a时loop
不要使用return
,因为如果发生任何错误,它将中断循环以进行下一次迭代。我们应该continue
在这里使用来让循环完全执行。
推荐阅读
- r - 在 R 中使用行函数时出现意外的“,”
- jquery - 如果选中单选按钮,则显示隐藏 div
- c++ - 使用均匀分布的随机数进行蒙特卡罗模拟
- typescript - 在 TypeScript 中循环设置对象字段
- android - 在没有 GUI 和 HAL 的 android 系统上解决配对 pin 交换
- javascript - 如何在 Next.js 中过滤道具?无法从 Next.js 中的 componentDidMount 过滤道具中的数据
- coq - Coq:在“隐式”之后应出现语法错误“类型”或“类型”
- regex - 在循环中动态构建正则表达式模式 - 不平衡括号错误
- arrays - 如何保存函数的返回数组?
- google-apps-script - 如何在插入大量数据时修复“访问文档时服务文档失败”?