You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Charts Pod问题:将entries设为类属性后图表出现额外数据

问题解决方法

问题核心在于类属性的entries未在每次刷新前清空:

  • 原本的局部entries每次调用setChart()都会重新初始化空数组,确保每次都是全新数据;
  • 改为类属性后,entries会持久保留之前的数据,每次调用setChart()时直接追加新数据,导致旧数据被重复叠加。

修复方案

在setChart()方法的开头,先清空entries数组,再执行数据添加逻辑:

修改后的完整代码:

class HomeViewController: UIViewController {

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

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        pieChart.delegate = self               
        self.setChart()
    }
    
    func setChart() {
        entries.removeAll() // 关键:每次刷新前清空旧数据
        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()        
    }
}

也可以选择直接重置为空数组,效果一致:

func setChart() {
    entries = [] // 直接重置为空数组
    // 后续循环逻辑不变
}

两种方式都能保证每次刷新时entries是全新的空数组,不会累积旧数据,图表即可正常展示最新内容。

内容的提问来源于stack exchange,提问作者TheCrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:20:29