当我在搜索栏中搜索期间通过从Firebase数据库检索昵称来尝试查找用户时,我正在开发应用。我想先把我的所有用户放在一个数组中,但我不能。
使用代码编辑进行编辑:
var userTab = [String]()
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
ref.child("users").queryOrdered(byChild: "pseudo").observeSingleEvent(of: .value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("Aucune donnée trouvée dans la base de données")
} else {
for child in snapshot.children {
let userSnap = child as! DataSnapshot
let uid = userSnap.key
let userDict = userSnap.value as! [String: AnyObject]
let pseudo = userDict["nickname"] as! String
let total = snapshot.childrenCount
print(pseudo)
self.userTab.append(pseudo) // I change this line self.userTab = [pseudo]
self.resultsController.tableView.reloadData() // I add this line
print(self.userTab)
continue // I add this line too
}
}
})
print("userTab: \(self.userTab)") // Now the array isn't empty
}
在For循环中,我可以访问变量" pseudo"并在控制台中打印所有用户昵称,但在For循环之外我不能将伪变量放在数组userTab中。我怎样才能做到这一点?我真的需要在userTab中填写用户的昵称,然后在TableView中显示所有内容。 我已经尝试声明"伪"在viewDidLoad()方法之外的变量但同样的问题,在For循环之后数组总是空的。我做错了什么?
查看我的编辑,现在所有用户的昵称都在userTab数组中,我可以在搜索栏中搜索它们,并在tableView中显示结果。
答案 0 :(得分:1)
observeSingleEvent
是异步的,它不是外部循环,而是在不同的时间,
尝试设置断点以查看它首先停在哪里
你设置self.userTab = [pseudo]
所以现在只需重新加载tableview