【问题标题】:How can I display users nickname from Firebase in an array then in a TableView (For loop issue)如何在数组中显示来自 Firebase 的用户昵称,然后在 TableView 中显示(For 循环问题)
【发布时间】: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 中。

【问题讨论】:

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

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


【解决方案1】:

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

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

【讨论】:

  • 先停是什么意思?
  • 你试过设置断点吗?在self.userTab = [pseudo] 和您要打印的地方?
  • 如果你有 2 个断点,你知道其中一个会先停止程序
  • 我明白你的意思,我还没有尝试断点,但我的代码并没有停止,它只是在循环外的数组中不打印任何内容。我没有把我的 tableView 代码放在问题中,但我可以把我的完整代码放在这里
  • 所以设置这个断点,你的打印是在数组中设置结果之后完成的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2019-01-26
  • 2017-01-06
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
相关资源
最近更新 更多