我一直在尝试加载一系列我想要放在不同表视图单元格上的团队名称,但它似乎永远不会正确加载它们。
我一直试图让程序等到它返回值,但它似乎永远不会得到任何,因为它总是崩溃,得到加载错误,或者只是冻结。
var ref: FIRDatabaseReference?
var teamData = [String]()
var teamCount : Int?
var hasfilled = false
var firstRun = false
var currentUser = FIRAuth.auth()?.currentUser
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
ref = FIRDatabase.database().reference()
//Load each team
let path = ref?.child("Users").child(currentUser!.uid).child("joinedTeams")
path?.observeSingleEvent(of: .value, with: { (snapshot) in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot{
let teamName = rest.value as? String
if let teamNameData = teamName {
self.teamData.append(teamNameData)
}
}
self.teamCount = Int(snapshot.childrenCount)
})
if runTillCompletion() == true {
self.tableView.reloadData()
}
}
func runTillCompletion() -> Bool{
if self.teamCount == self.teamData.count {
return true
}
return runTillCompletion()
}
我尝试了几种不同的方式,从一个循环循环到重新加载它。
我想重新加载视图,以便它运行确定单元格数量/单元格内容的表格视图方法。
我确信有更好的方法可以做到这一点,因为使用while循环/递归函数已经非常麻烦。
非常感谢!
答案 0 :(得分:1)
您的runTillCompletion方法在Firebase响应之前调用,因此tableview为空。您需要在从firebase获取数据后重新加载表。
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
ref = FIRDatabase.database().reference()
//Load each team
let path = ref?.child("Users").child(currentUser!.uid).child("joinedTeams")
path?.observeSingleEvent(of: .value, with: { (snapshot) in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot{
let teamName = rest.value as? String
if let teamNameData = teamName {
self.teamData.append(teamNameData)
}
}
self.teamCount = Int(snapshot.childrenCount)
self.tableView.reloadData()
})
}
答案 1 :(得分:0)
curl -x