iOS-Charts错误:Thread1:EXC_BAD_ACCESS(代码= 2,地址= 0x2a0c220)

时间:2016-01-30 23:55:12

标签: swift ios-charts

所以,我正在关注AppCoda上的iOS-Charts教程,我完全遵循它,然后当我遇到问题时,我也复制了代码以完全匹配它们。

问题是,当我尝试创建饼图时,然后运行它。我收到错误:

  

线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x2a0c220)

并且应用程序崩溃了。当它崩溃时,它会突出显示这一行:

pieChartView.data = pieChartData

以下是屏幕截图:

screen shot

以下是viewcontroller.swift的完整代码:

import UIKit
import Charts

class ViewController: UIViewController {

@IBOutlet weak var pieChartView: PieChartView!

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 pieChartDataSet = PieChartDataSet(yVals: dataEntries, label: "Units Sold")
    let pieChartData = PieChartData(xVals: dataPoints, dataSet: pieChartDataSet)
    pieChartView.data = pieChartData

    var colors: [UIColor] = []



    for i in 0..<dataPoints.count {
        let red = Double(arc4random_uniform(256))
        let green = Double(arc4random_uniform(256))
        let blue = Double(arc4random_uniform(256))

        let color = UIColor(red: CGFloat(red/255), green: CGFloat(green/255), blue: CGFloat(blue/255), alpha: 1)
        colors.append(color)
    }

    pieChartDataSet.colors = colors




}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
    let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0]

    setChart(months, values: unitsSold)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

2 个答案:

答案 0 :(得分:3)

看起来你可能错过了这部分:

172.17.0.2

您需要在View Controller中创建一个UIView,并将其链接到@IBOutlet弱变量pieChartView:PieChartView!在你的代码中。

然后它会起作用。 它看起来像一个很好的图书馆。

希望它有所帮助。请告诉我们。

编辑:

转到故事板上的View Controller并拖动UIView。然后选择UIView并在身份检查器中将其类设置为PieChartView。打开ViewController swift文件,右键单击顶部@IBOutlet行上的小圆圈,然后通过右键单击将其拖动到刚创建的UIView上并保留。现在你将插座连接到代码,它会将pieChartView var识别为对象而不是当前的nil。

This is how it looks

答案 1 :(得分:3)

我用相同的代码完全一样的错误。

就像smozgur所建议的那样,我检查了Iboutlet连接,但似乎链接正常

问题是我设置了错误的模块,因此也请检查“模块目标” 我希望这会对某人有所帮助:)