首页 > 解决方案 > 对于没有任何错误连接的键错误,类不符合键值编码

问题描述

我正在使用 Daniel Gindi 的图表库,我的想法是在 ScrollView 上显示多个折线图。

我有一个应该显示 4 个折线图的 ScrollView。它们将是 4 个独立的图表,即它们不会绘制在相同的轴上(尽管它们共享相同的 x 轴值)。由于 SIGABRT 错误,当我更改为此视图时,我的应用程序崩溃。

首先,我尝试为每个图表制作单独的函数,但我意识到由于在函数中使用 LineChartEntry,您不能这样做,它们必须是不同图表的单独实例。所以我尝试编写一个通用函数,如下所示。

import UIKit
import Charts

class sparkTrendController: UIViewController {

    @IBOutlet weak var chiller1TrendSpark: LineChartView!

    @IBOutlet weak var chiller2TrendSpark: LineChartView!

    @IBOutlet weak var chiller3TrendSpark: LineChartView!

    @IBOutlet weak var chiller4TrendSpark: LineChartView!


    var numberOfSparksChiller1: [Double] = [5,8,6,4,2,1,2,1,1,0]

    var numberOfSparksChiller2: [Double] = [10,13,8,7,8,7,5,4,2,1]

    var numberOfSparksChiller3: [Double] = [15,13,8,2,2,7,5,5,6,1]

    var numberOfSparksChiller4: [Double] = [12,3,5,7,3,7,5,4,7,1]

    var daysNumbered: [Double] = [1,2,3,4,5,6,7,8,9,10]

    var lineChartEntry1 = [ChartDataEntry]()

    var lineChartEntry2 = [ChartDataEntry]()

    var lineChartEntry3 = [ChartDataEntry]()

    var lineChartEntry4 = [ChartDataEntry]()

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.topItem?.title = "Trends of Sparks"
        updateGraph(daysNumbered: daysNumbered, numberOfSparks: numberOfSparksChiller1, label: "Chiller 1", chiller: chiller1TrendSpark)
        updateGraph(daysNumbered: daysNumbered, numberOfSparks: numberOfSparksChiller2, label: "Chiller 2", chiller: chiller2TrendSpark)
        updateGraph(daysNumbered: daysNumbered, numberOfSparks: numberOfSparksChiller3, label: "Chiller 3", chiller: chiller3TrendSpark)
        updateGraph(daysNumbered: daysNumbered, numberOfSparks: numberOfSparksChiller4, label: "Chiller 4", chiller: chiller4TrendSpark)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func updateGraph(daysNumbered: [Double], numberOfSparks: [Double], label: String, chiller: LineChartView) {
        var lineChartEntry = [ChartDataEntry]()
        for i in 0..<daysNumbered.count {
            let value = ChartDataEntry(x: daysNumbered[i], y: numberOfSparks[i])
            if chiller == chiller1TrendSpark {
                lineChartEntry = lineChartEntry1
            }
            if chiller == chiller2TrendSpark {
                lineChartEntry = lineChartEntry2
            }
            if chiller == chiller3TrendSpark {
                lineChartEntry = lineChartEntry3
            }
            if chiller == chiller4TrendSpark {
                lineChartEntry = lineChartEntry4
            }
            lineChartEntry.append(value)
            //LineChartDataSet(entries: lineChartEntry, label: label)
            LineChartDataSet(entries: lineChartEntry, label: label).colors = [NSUIColor.red]
            let data = LineChartData()
            data.addDataSet(LineChartDataSet(entries: lineChartEntry, label: label))
            chiller.data = data
            chiller.chartDescription?.text = "Number Of Sparks"
        }
    }
}

编辑:我尝试像这样重写代码,它仍然有同样的错误。

import UIKit
import Charts

class sparkTrendController: UIViewController {

    @IBOutlet weak var chiller1TrendSpark: LineChartView!

    @IBOutlet weak var chiller2TrendSpark: LineChartView!

    @IBOutlet weak var chiller3TrendSpark: LineChartView!

    @IBOutlet weak var chiller4TrendSpark: LineChartView!


    var numberOfSparksChiller1: [Double] = [5,8,6,4,2,1,2,1,1,0]

    var numberOfSparksChiller2: [Double] = [10,13,8,7,8,7,5,4,2,1]

    var numberOfSparksChiller3: [Double] = [15,13,8,2,2,7,5,5,6,1]

    var numberOfSparksChiller4: [Double] = [12,3,5,7,3,7,5,4,7,1]

    var daysNumbered: [Double] = [1,2,3,4,5,6,7,8,9,10]


    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.topItem?.title = "Trends of Sparks"

        customizeChart(dataPoints: numberOfSparksChiller1, values: daysNumbered, lineChartView: chiller1TrendSpark, label: "Chiller 1 Sparks")
        customizeChart(dataPoints: numberOfSparksChiller2, values: daysNumbered, lineChartView: chiller2TrendSpark, label: "Chiller 2 Sparks")
        customizeChart(dataPoints: numberOfSparksChiller3, values: daysNumbered, lineChartView: chiller3TrendSpark, label: "Chiller 3 Sparks")
        customizeChart(dataPoints: numberOfSparksChiller4, values: daysNumbered, lineChartView: chiller4TrendSpark, label: "Chiller 4 Sparks")

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    func customizeChart (dataPoints: [Double
        ], values: [Double], lineChartView: LineChartView, label: String) {

        //1) set ChartDataEntry
        var dataEntries: [ChartDataEntry] = []
        for i in 0..<dataPoints.count {
            let entries = ChartDataEntry(x: values[i], y: dataPoints[i])
            //let dataEntry = LineChartDataSet(entries: entries, label: label)
            dataEntries.append(entries)
        }
        //2) set ChartDataSet
        let chartDataSet = LineChartDataSet(entries: dataEntries, label: label)

        //3) set ChartData
        let lineChartData = LineChartData(dataSet: chartDataSet)

        //4) assign it to chart's data
        lineChartView.data = lineChartData

    }


}

对于第二个代码,这是调试区域的错误。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

Github 仓库:https ://github.com/danialaqil/TFAApp/tree/master/AlarmChartsApp 。有问题的代码是 sparkTrendController.swift 文件

标签: iosswiftios-charts

解决方案


推荐阅读