从firebase实时数据库中获取并显示用户名

时间:2017-05-30 18:32:43

标签: ios firebase swift3 firebase-realtime-database

我试图从firebase实时数据库中获取用户名并将其显示在我的TableViewCell的标签中。我究竟做错了什么? userShortname.text仍然为空。我只使用电子邮件/密码验证 这是我的代码

{{1}}

2 个答案:

答案 0 :(得分:0)

在退出self.tableView.reloadData()关闭之前添加obserseSingleEvent。例如:

profilePath.obserseSingleEvent(of: .value) { (snapshot) in
    ...
    self.username = snapUsername
    self.tableView.reloadData()
}

这将让您的tableView知道网络响应已经到来;)

答案 1 :(得分:0)

<强> 1。 Firebase呼叫是异步

这意味着创建一个单独的线程来处理其分配的任务,主线程永远不会等待它继续进行下一个操作。

<强> 2。 iOS主线程

所有UI更新都通过主线程完成。永远不要运行冗长的任务,这需要花费更多的时间来完成这个线程。

Firebase执行完任务后,您需要将此信息传达给用户,因此需要进行UI更新。简单地写self.tableView.reloadData()将始终有效 IF 所有内容都能与Firebase一起顺利运行;即使他们无法保证这一点:)

如果Firebase查询被挂起:

Blocks the main thread
       ----> Deem your app unresponsive
            --> If unresponsive for a couple seconds, the watchdog kills your app.

为了避免这种情况,一旦Firebase的线程执行完毕并且您已将新数据添加到内存中,您需要告诉主线程执行任何相关的UI更新。

profilePath.obserseSingleEvent(of: .value) { (snapshot) in
    ...
    self.username = snapUsername

    DispatchQueue.main.async
    {
      self.tableView.reloadData()
    }
}

我建议您熟悉iOS multi-threading并阅读this答案以了解冗长的任务操作。