我目前遇到的问题是尝试将值用作表视图的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
}
}
我已经在numberOfRows中移动了firebase数据库数据。 这会打印所需的值,但我仍然无法将其用作返回值。
答案 0 :(得分:1)
我认为问题在于您正在尝试访问最有可能是异步调用的远程数据库,因此您只是在numberOfRowsInsection
被点击时没有值。
修改强>
最简单的方法是将didSet
用于self.prevOrderDict
。这样,您就可以确切地知道何时将值分配给Dict。
最初,您可以检查是否self.prevOrderDict != nil
,如果是,则使用count作为返回值,否则返回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
}
答案 1 :(得分:0)
删除!来自退货声明
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
if tableView == self.currentOrderTblView
{
return 1
}
else
{
return self.prevOrderCount
}
}
将变量声明为
var prevOrderCount: Int!
同样在viewDidLoad中将其初始化为
self.prevOrderCount=0 // 0 or anything you wanted as default
假设这些选项包含一个值。因此,无论何时访问它都将隐式解包可选,它将自动为您强行打开。如果它不包含值,它将崩溃。
确保您已分配值