我目前在尝试使用一个值作为 TableView 的 numberOfRows
函数的返回值时遇到问题。在我的 viewDidLoad
中,我有下面的代码,它打印了我需要的值,但是当我尝试返回相同的变量时,它说在展开值时发现 nil。有什么建议吗?
let prevOrderRef = ref?.child("Users").child(currentUserID!).child("Previous Orders")
prevOrderRef?.observeSingleEvent(of: .value, with: { (snapshot) in
let dict = PreviousOrders(snapshot: snapshot)
self.prevOrderCount = dict.prevOrdersDict?.count
print(self.prevOrderCount!)
})
更新:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.currentOrderTblView {
return 1
} else {
let prevOrderRef = ref?.child("Users").child(currentUserID!).child("Previous Orders")
prevOrderRef?.observeSingleEvent(of: .value, with: { (snapshot) in
let dict = PreviousOrders(snapshot: snapshot)
self.prevOrderCount = dict.prevOrdersDict?.count
print(self.prevOrderCount!)
})
return 2
}
}
我已将 firebase 数据库数据观察移动到 numberOfRows 中。 这会打印所需的值,但我仍然无法将其用作返回值。
最佳答案
我认为问题在于您正在尝试访问远程数据库,这很可能是异步调用,因此您目前没有值 numberOfRowsInsection
被命中。
编辑
最简单的方法是对self.prevOrderDict
使用didSet
。这样您就可以确切地知道何时将值分配给 Dict。
最初,您可以检查是否 self.prevOrderDict != nil
,如果是,则使用计数作为返回值,否则返回 0。这将为您提供一个空表。一旦 didSet
被命中,您就可以使用 tableView.reloadData()
。
var prevOrderDict = [] {
didSet {
tableView.reloadData()
}
}
和
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.prevOrderDict != nil {
return self.prevOrderDict.count
} else {
return 0
}
关于ios - Swift 3 numberOfRows TableView 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43254312/