我试图将我的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
}
}
答案 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
,外部,因此它们只发生一次所有数据。