如何在数组中显示Firebase中的用户昵称,然后在TableView中显示(For循环问题)

时间:2017-10-17 11:03:08

标签: ios firebase for-loop swift3 firebase-realtime-database

当我在搜索栏中搜索期间通过从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中显示结果。

1 个答案:

答案 0 :(得分:1)

observeSingleEvent是异步的,它不是外部循环,而是在不同的时间, 尝试设置断点以查看它首先停在哪里

你设置self.userTab = [pseudo]所以现在只需重新加载tableview