@fakin_kiska
Telegram Bots and iOS

Почему добавляются лишние записи на диаграмму?

У меня есть круговая диаграмма, которая отображает добавленные в нее данные
Выглядит это таким образом:

class HomeViewController: UIViewController {

    var pieChart = PieChartView() // Круговая диаграмма

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        pieChart.delegate = self               
        self.setChart()
    }
    
    // Вывод данных на диаграмму
    func setChart() {
        var entries: [ChartDataEntry] = [] // Массив записей в диаграмме
                
        for entry in 0..<(self.cellArr.count) {
            if self.cellArr.count > 0 {
                let dataEntry = PieChartDataEntry(value: Double(self.cellArr[entry].amount), label: String(self.cellArr[entry].type))
                entries.append(dataEntry) // Добавление записи
            }
        }
        updateSorting(values: entries)
    }
    
    func updateSorting(values: [ChartDataEntry]){
        let dataSet = PieChartDataSet(entries: values, label: "")
        let data = PieChartData(dataSets: [dataSet])
        
        dataSet.colors = ChartColorTemplates.colorful()
        pieChart.data = data
        pieChart.notifyDataSetChanged()        
    }
}


Проблема в переменной entries, которая расположена в функции setChart. Мне необходимо с ней работать за пределами функции, но если я ее вынесу в класс -
class HomeViewController: UIViewController {

    var pieChart = PieChartView() // Круговая диаграмма
    var entries: [ChartDataEntry] = [] // <------------ !!!

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        pieChart.delegate = self               
        self.setChart()
    }
}

То диаграмма начнет выводить лишние значения

Наглядный пример:

639b3f2ac93ba655170676.png
639b3f323197d279694656.png

На первом скриншоте entries находится в функции, на втором уже за ней
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
@fakin_kiska Автор вопроса
Telegram Bots and iOS
Я поместил массив записей в класс и сделал очистку массива в функции setChart, так как записи в нем копились раз за разом. Также переделал структуру добавления новых записей в функции

class HomeViewController: UIViewController {

    var pieChart = PieChartView()
    var entries: [ChartDataEntry] = []

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.setChart()
    }

    func setChart() {
        entries.removeAll()
        let entries = self.cellArr.map { PieChartDataEntry(value: Double($0.amount), label: String($0.type))) }
        updateSorting(values: entries)
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы