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

Posted

技术标签:

【中文标题】如何在数组中显示来自 Firebase 的用户昵称,然后在 TableView 中显示(For 循环问题)【英文标题】:How can I display users nickname from Firebase in an array then in a TableView (For loop issue) 【发布时间】:2017-10-17 11:03:08 【问题描述】:

我正在开发一个应用程序,当我试图通过在搜索栏中搜索期间从 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 循环中,我可以访问变量“伪”并在控制台中打印所有用户昵称,但 在 For 循环之外我不能将伪变量放入数组 userTab 中。我怎样才能做到这一点?我真的需要用用户的昵称填充我的 userTab 并在 TableView 中显示所有内容。 我已经尝试在 viewDidLoad() 方法之外声明“伪”变量,但同样的问题,在 For 循环之后数组始终为空。我做错了什么?

查看我的编辑,现在所有用户昵称都在 userTab 数组中,我可以在搜索栏中搜索它们并将结果显示在 tableView 中。

【问题讨论】:

在获取数据之前,创建带有标题的表。之后,将项目添加到数组并同时在表中创建行。这可以解决您的问题。 我没有在帖子中输入代码,但我已经这样做了。你要我把我的完整代码吗? 【参考方案1】:

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

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

【讨论】:

先停是什么意思? 你试过设置断点吗?在self.userTab = [pseudo] 和您要打印的地方? 如果你有 2 个断点,你知道其中一个会先停止程序 我明白你的意思,我还没有尝试断点,但我的代码并没有停止,它只是在循环外的数组中不打印任何内容。我没有把我的 tableView 代码放在问题中,但我可以把我的完整代码放在这里 所以设置这个断点,你的打印是在数组中设置结果之后完成的

以上是关于如何在数组中显示来自 Firebase 的用户昵称,然后在 TableView 中显示(For 循环问题)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中使用适配器显示来自 Firebase 的组列表?

如何在 firebase 中添加来自用户的数据,而不是替换已经存在的数据?

如何在 Vue.js 中显示 Firebase 数组项

将 Firebase 图像显示到数组中

如何在来自 Firebase 存储的片段 ImageView 中显示图像

如何在反应js中显示来自firebase存储的所有图像