我目前正在使用Firebase并尝试获取节点中子节点数的计数,以确定UITableViewController
部分的行数。但是由于呼叫是异步的,因此无法在外部正确保存。
注意:我分配了一个名为" count"在datatbase中是子节点数,但实际计算子节点的函数也是异步。
这是我的代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let userID = FIRAuth.auth()?.currentUser?.uid
ref = FIRDatabase.database().reference()
var count = 0
if section == 0 {
ref.child("users").child("merchants").child(userID!).child("menu").child(spirits[section]).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let count = value?["count"] as? Int
print("count in: ", count!)
})
print("count out: ", count)
} else {
count = 0
}
return count
}
这是输出:
数出:0 数出:0 数出:0 数出:0 数出:0 数:1 数:1 数:1 数:1 数:1
我已经搜索了多个堆栈溢出问题,试图解释调度或完成代码,我无法得到任何工作。我怎样才能让我的计数正确归还?
答案 0 :(得分:0)
永远不要在numberOf...
表视图数据源方法之一中加载数据。获取viewDidLoad
或viewWillAppear
中的数据,然后在表格视图中调用reloadData()
。
在numberOfRowsInSection
中,只返回模型中的项目数(数据源数组)。
有无数的例子如何正确使用表视图数据源和委托方法。