我非常怀疑这个问题还没有得到答案,但是我无法通过stackoverflow上的外部帖子来解决。
我正在使用xcode swift中的observeSingleEvent方法提取数据。
问题是,即使我想等待firebase返回数据,firebase还是异步运行,并且代码可以通过。
var requests_list:NSMutableDictionary = [:]
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let ref = Database.database().reference()
let userID: String = (Auth.auth().currentUser?.uid)!
ref.child("users").child(userID).child("requests").observeSingleEvent(of: .value, with: {(snapshot) in
let requests = snapshot.value as! NSDictionary
for (key,_) in requests{
ref.child("users").child(key as! String).observeSingleEvent(of: .value, with: {(snapshot) in
let value1 = snapshot.value as! NSDictionary
let username = value1["username"]!
let keyvalue = key as! String
self.requests_list[keyvalue] = username
print(self.requests_list)
})
}
})
}
这是我的tableView,用于计算必须有多少行。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text = self.requests_list.allValues[indexPath.row] as? String
print(self.requests_list.allValues[0] as! String)
return cell
}
这是填充单元格的地方。问题在于程序认为列表是空的,所以他们不填写行。