无法将所有Firebase数据显示为折线图

时间:2019-05-23 08:29:52

标签: swift firebase firebase-realtime-database charts

我试图将我的Firebase数据显示到折线图中,但是它仅显示数据库中的一个数据,而我想显示数据库中的所有数据。我只是这个新手,所以如果有人可以帮助我,那就太好了。

let ref = Database.database().reference().child("WeightTracker")

ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in

    for rest in snapshot.children.allObjects as! [DataSnapshot] {

        guard let restDict = rest.value as? [String: Any] else { continue }
        let weight = restDict["weight"] as? String
        print(weight as Any)
        let date = restDict["date"] as? String
        print(date as Any)

        var xAxisValues = [""]
        var yAxisValues = [0.0]
        let total = Int(Double(weight!)!) * Int(2.20)
        xAxisValues.append(date!)
        yAxisValues.append(Double(total))
        let formatter = WTRandomVC(lineChart: self.lineChartsView, xArray: xAxisValues , yArray: yAxisValues)
        self.lineChartsView?.data?.setValueFormatter(formatter)
        continue
     }

 }

1 个答案:

答案 0 :(得分:0)

您的代码遍历从数据库中获得的结果,然后使用每个项目的数据创建一个新的formatter并将其设置为图表。这意味着一旦代码完成,图表将仅显示数据库的最后结果。要显示所有结果,您需要将数据收集到单个formatter中,然后在聊天中显示那个

代码应如下所示:

let ref = Database.database().reference().child("WeightTracker")

ref.child("\(currentUser)").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in

    var xAxisValues = [""]
    var yAxisValues = [0.0]

    for rest in snapshot.children.allObjects as! [DataSnapshot] {

        guard let restDict = rest.value as? [String: Any] else { continue }
        let weight = restDict["weight"] as? String
        let date = restDict["date"] as? String

        let total = Int(Double(weight!)!) * Int(2.20)
        xAxisValues.append(date!)
        yAxisValues.append(Double(total))
     }
    let formatter = WTRandomVC(lineChart: self.lineChartsView, xArray: xAxisValues , yArray: yAxisValues)
    self.lineChartsView?.data?.setValueFormatter(formatter)

 }

因此,在上文中,我们提取了带有数据的数组,并创建了WTRandomVC循环的for外部,因此它们只发生一次所有数据。