我试图从firebase数据库检索数据到tableview,但我只有一个元素

时间:2018-01-17 08:40:51

标签: ios swift xcode firebase firebase-realtime-database

我尝试将数据从Firebase数据库检索到Xcode中的tableview 但即使我在数据库中有很多元素,我也只有一个元素。

我遵循了一个教程,我假设将{sonsList.count返回numberOfRowsInSection,但没有任何反应。

这是我的代码:

import UIKit
import Firebase
import FirebaseDatabase

class sons  {
    let name : String!
    //let place : String!

init(title_String : String!){

    self.name = title_String
   // self.place = place_String
    }   
}

class sonsTableViewController: UITableViewController {

    var ref:DatabaseReference!

    //var  sons = [String]()
    var newSon: String = ""
    let cellId = "cellId"
    var refHandel : uint!
    var sonsList = [sons]()

    override func viewDidLoad() {
        super.viewDidLoad()


        ref = Database.database().reference()
        ref.child("name").queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { snapshot in

            let value = snapshot.value as? NSDictionary
            let name = value!["name"] as! String
            self.sonsList.append(sons(title_String : name))
            self.tableView.reloadData()

        })

        //fetchName()

    }

    func fetchName()  {

    }


    @IBAction func cancel(segue:UIStoryboardSegue) {


    }

    @IBAction func done(segue:UIStoryboardSegue) {

        var sonDetailVC = segue.source as! addSonViewController
        newSon = sonDetailVC.name
        // sons.append(newSon)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return sonsList.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
        let label = cell?.viewWithTag(1) as! UILabel
        label.text = sonsList[indexPath.row].name

        return cell!
    }

}

enter image description here

1 个答案:

答案 0 :(得分:0)

您的数据库查询存在问题。

您只在sonsList附加一个值。

    ref = Database.database().reference()
    ref.child("name").queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { snapshot in

        //Parse snapshot value correctly it is array or not.

      if let dicValue = snapshot.value as? [String : Any] { 
     for (key,value) in dicValue { 
             let name = value["name"] as? String
             self.sonsList.append(sons(title_String : name))
     }
             self.tableView.reloadData()
  }
})

请参阅此链接以获取firebase数据库中的数据。

https://firebase.google.com/docs/database/ios/read-and-write