UITableView 未加载 Firebase 快照数据。

Posted

技术标签:

【中文标题】UITableView 未加载 Firebase 快照数据。【英文标题】:UITableView not loading Firebase Snapshot Data. 【发布时间】:2017-04-10 12:20:26 【问题描述】:

我有一个具有以下结构的 Firebase 数据库: “用户” -uid - 姓名 - 电子邮件 .我想将“用户”电子邮件和名称输入到 XCode 中的 UITableviewController 表视图中。数据可以在我的控制台中看到,但没有附加到我的表格视图中

class DictionaryTableViewController: UITableViewController 

var ref: FIRDatabaseReference!
let cellID = "Cell"
var refHandle: UInt!
var userList = [Users]()

override func viewDidLoad() 
  super.viewDidLoad()
  //Set firebase database reference
  ref = FIRDatabase.database().reference()

  //Retrieve posts and listen for changes
  refHandle = ref?.child("users").observe(.childAdded, with:  (snapshot) in
     //Code that executes when child is added
     if let dict = snapshot.value as? [String: AnyObject] 
        let user = Users()
        user.name = snapshot.childSnapshot(forPath: "name").value as? String
        print(user.name)
        user.email = snapshot.childSnapshot(forPath: "email").value as? String
        print(user.email)
        print("databaseHandle was called")
        for user in self.userList 
           print(user)
           self.userList.append(user)

        
        self.tableView.reloadData()
     
  )
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
     return userList.count
  
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
     let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellID)
     cell.textLabel?.text = userList[indexPath.row].name.self
     cell.textLabel?.text = userList[indexPath.row].email.self
     return cell

   
 

【问题讨论】:

在主线程上重新加载表。 为什么会得到自己的姓名和邮箱? userList[indexPath.row].name.self 【参考方案1】:

删除这个:

self.tableView.reloadData()

在 if let 语句之后添加:

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

【讨论】:

我已将此添加到我的代码中,但它仍然没有在 tableview 上显示任何内容。请参阅下面的代码。【参考方案2】:

像这样;仍然没有显示表格上的数据。

//Retrieve posts and listen for changes func fetchUserData(with completion:@escaping (Bool)->()) refHandle = ref?.child("users").observe(.childAdded, with: (snapshot) in //Code that executes when child is added if (snapshot.value as? [String: AnyObject]) != nil let user = Users() user.name = snapshot.childSnapshot(forPath: "name").value as? String print(user.name) DispatchQueue.main.async user.email = snapshot.childSnapshot(forPath: "email").value as? String print(user.email) print("databaseHandle was called") for user in self.userList print(user) self.userList.append(user) self.userTable.reloadData()

【讨论】:

以上是关于UITableView 未加载 Firebase 快照数据。的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 与 Swift 3.0 UITableView

NSMutableArray 未更新且 UITableView 未重新加载

UITableView 中未加载 JSON 数据

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

UITableviewcontroller 中的 UITableview - 重新加载时未调用 cellforrowatindexpath

数据未使用 Alamofire + SwiftyJSON 加载到 UITableView