не могу показать все данные о базе данных на линейной диаграмме - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь отобразить мои данные о базе данных в моей линейной диаграмме, но она показывает только одну информацию из базы данных, и я хочу показать все данные из базы данных.Я просто новичок в этом, так что если кто-нибудь может мне помочь с этим, было бы здорово.

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 голосов
/ 23 мая 2019

Ваш код перебирает результаты, полученные из базы данных, а затем создает новый 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, так что они происходят только один раз для всех данных. .

...