2017-03-07 16 views
0

我有一个应用程序,我从Firebase获取一些数据的天数,我试图在单独的图表中显示每天的数据,使用iOS图表,但它崩溃时出现错误'致命错误:索引超出范围'。下面是我的代码:swift - iOS图表 - 在一个ViewController中使用两个数据集的两个LineChart视图

func setChart(dataPoints: [String], values: [Double]) { 

    var dataEntries: [ChartDataEntry] = [] 

    for i in 0..<dataPoints.count { 
     let dataEntry = ChartDataEntry(value: values[i], xIndex: i) 
     dataEntries.append(dataEntry) 
    } 





    let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Units Sold") 
    let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet) 
    firstDayChart.data = lineChartData 

} 

func setChart2(dataPoints: [String], values: [Double]) { 

    var dataEntries: [ChartDataEntry] = [] 

    for i in 0..<dataPoints.count { 
     let dataEntry = ChartDataEntry(value: values[i], xIndex: i) 
     dataEntries.append(dataEntry) 
    } 







    let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Units Sold") 
    let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet) 
    secondDayChart.data = lineChartData 

} 

//按钮

@IBAction func getResults(sender: UIButton) { 
    let doubleArray = BGdataOutsideDay1.map { Double($0)!} 
    // print(doubleArray) 
    // var newArray:[Double] = [] 


    self.doublesArrayDay1 = doubleArray 

    if doublesArrayDay1.count != 0 { 
    let bgAvg = doubleArray.reduce(0, combine: +)/Double(doubleArray.count) 
    let highest = doubleArray.maxElement() 
    let lowest = doubleArray.minElement() 
    self.bgHighestDay1 = String(format: "%.1f", highest!) 
    self.bgAvgDay1 = String(format: "%.1f", bgAvg) 
    self.bgLowestDay1 = String(format: "%.1f", lowest!) 
    self.firstDayHighest.text = self.bgHighestDay1! + " " + "\(self.units!)" 
    self.firstDayAvg.text = self.bgAvgDay1! + " " + "\(self.units!)" 
    self.firstDayLowest.text = self.bgLowestDay1! + " " + "\(self.units!)" 
    } else { 
     self.firstDayHighest.text = "0" + " " + "\(self.units!)" 
     self.firstDayAvg.text = "0" + " " + "\(self.units!)" 
     self.firstDayLowest.text = "0" + " " + "\(self.units!)" 

    } 
    let doubleArray2 = BGdataOutsideDay2.map { Double($0)!} 
    // print(doubleArray) 
    // var newArray:[Double] = [] 


    self.doublesArrayDay2 = doubleArray 

    if doublesArrayDay2.count != 0 { 
     let bgAvg2 = doubleArray2.reduce(0, combine: +)/Double(doubleArray.count) 
     let highest2 = doubleArray2.maxElement() 
     let lowest2 = doubleArray2.minElement() 
     self.bgHighestDay2 = String(format: "%.1f", highest2!) 
     self.bgAvgDay2 = String(format: "%.1f", bgAvg2) 
     self.bgLowestDay2 = String(format: "%.1f", lowest2!) 
     self.secondDayHighest.text = self.bgHighestDay2! + " " + "\(self.units!)" 
     self.secondDayAvg.text = self.bgAvgDay2! + " " + "\(self.units!)" 
     self.secondDayLowest.text = self.bgLowestDay2! + " " + "\(self.units!)" 
    } else { 
     self.secondDayHighest.text = "0" + " " + "\(self.units!)" 
     self.secondDayAvg.text = "0" + " " + "\(self.units!)" 
     self.secondDayLowest.text = "0" + " " + "\(self.units!)" 
     setChart(DateOutSideDay1, values: doublesArrayDay1) 
    setChart(DateOutSideDay2, values: doublesArrayDay2) 

    } 

任何帮助将不胜感激!提前致谢! :)

+0

好像'values'数组比'dataPoints'数组少。这会解释你遇到的错误。 – Laffen

+0

是的,我知道原因,但我想让它工作:) – Deyan

+0

你检查了哪个数组导致这个问题? –

回答

0

首先我觉得奇怪的是,你有一组数据点和另一组值,但它们的大小不一样?这些集合应该是相同的大小,因为这些值代表数据点。

Anywho ..

您可以通过let dataEntry = ChartDataEntry(value: i < values.count ? values[i] : 0, xIndex: i)

您可以定义默认值替换let dataEntry = ChartDataEntry(value: values[i], xIndex: i)解决这个问题时,有没有可用的values数组中的索引值使用,我将它设置到0

+0

非常感谢! :) – Deyan

相关问题