表视图未使用Firebase进行更新

时间:2017-08-01 14:26:00

标签: swift uitableview firebase firebase-realtime-database

我正在尝试从Firebase数据库中获取表格视图。我的数据结构如下(用于报告汽车):

  1. 报告:
    • 随机生成的报告ID号:
      • 制造:"制造汽车"
      • model:" make of model"
  2. 我不认为我正在正确地调用数据。我不知道如何选择随机报告ID。但是我可能还有其他一些缺失的东西。我试图只让车辆的品牌和型号显示在单元格的文本中

    var reportList:[String] = []
    
    var ref: DatabaseReference!
    
    var handle: DatabaseHandle?
    
    
    @IBOutlet weak var reportsTableView: UITableView!
    
    @IBAction func backButtonPressed(_ sender: UIBarButtonItem) {
        self.performSegue(withIdentifier: "reportsToHome", sender: self)
    }
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return reportList.count
    
    }
    
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
    
        cell.textLabel?.text = reportList[indexPath.row]
    
        return cell
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        ref = Database.database().reference()
    
        handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in
            if (snapshot.value as? String) != nil
            {
                let make = String(describing: self.ref.child("Reports").child("make"))
                let model = String(describing: self.ref.child("Reports").child("model"))
                self.reportList.append(make + model)
    
                self.reportsTableView.reloadData()
            }
        }
    
        // Do any additional setup after loading the view.
    )}
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    }

1 个答案:

答案 0 :(得分:2)

我无法对此进行测试,但我觉得您正在尝试将快照转换为字符串。相反,您应该将其转换为字典,以便您可以轻松地按键检索数据。

试试这段代码。它将快照设置为字典,然后您可以从中检索品牌和型号:

override func viewDidLoad() {
super.viewDidLoad()

ref = Database.database().reference()

handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in
   if let reports = snapshot.value as? NSDictionary {
        var make = reports?["make"] as? String
        var model = reports?["model"] as? String

        self.reportList.append(make + model)
        self.reportsTableView.reloadData()
    }
}
)}

更进一步,您可以创建一个Report类:

class Report: NSObject {
    var make: String?
    var model: String?
}

然后,您可以从快照设置品牌和型号以创建新的报告对象。

var make = reports?["make"] as? String
var model = reports?["model"] as? String
let newReport = Report()
newReport.setValuesForKeys(reports)

我希望这有效,如果没有,我会再看一遍。