2017-04-10 83 views
0

我有一個Firebase數據庫,其結構如下: 「users」 -uid - 名稱 - 電子郵件 。我想將「用戶」電子郵件和名稱輸入到XCode的UITableviewController tableview中。數據可以在我的控制檯中可以看出,但不追加到我的表視圖UITableView不加載Firebase快照數據。

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 

    } 
} 
} 
+1

在主線程上重新加載表。 –

+0

爲什麼要得到名字和電子郵件的自我? 'userList [indexPath.row] .name.self' –

回答

0

刪除此:

self.tableView.reloadData() 

而且如果讓報表後補充一點:

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

我已經將它添加到我的代碼中,但它仍然不會在tableview上顯示任何內容。見下面的代碼。 – Masha

0

像這樣;不會顯示錶格上的數據。

//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() }