Ошибка iOS-Charts: Thread1: EXC_BAD_ACCESS (код =2, адрес =0x2a0c220)

Итак, я следую учебнику по iOS-диаграммам в AppCoda, я следовал ему отлично, затем, когда у меня возникли проблемы, я также скопировал код, чтобы точно соответствовать их.

Проблема в том, что когда я пытаюсь создать круговую диаграмму, а затем запустить ее. Я получаю ошибку:

Поток 1: EXC_BAD_ACCESS (код =2, адрес =0x2a0c220)

и приложение вылетает. Когда он падает, он выделяет эту строку:

pieChartView.data = pieChartData

Вот как снимок экрана экрана:

Скриншот

Вот полный код из 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 ответа

Решение

Похоже, вы могли пропустить эту часть:

Next drag a View onto the Bar Chart View Controller and pin its edges as shown. This View is a child of the main View in the controller.

Вам нужно создать UIView в вашем контроллере вида и связать его с @IBOutlet слабым var pieChartView: PieChartView! в вашем коде.

Тогда это будет работать. И это похоже на хорошую библиотеку.

Надеюсь, поможет. Пожалуйста, дайте нам знать.

РЕДАКТИРОВАТЬ:

Перейдите к вашему View Controller на раскадровке и перетащите UIView. Затем выберите UIView и установите его класс как PieChartView в инспекторе идентичности. Откройте файл Swift ViewController и щелкните правой кнопкой мыши по маленькому кружку в строке @IBOutlet вверху и перетащите его в UIView, который вы только что создали, удерживая правый клик и оставив его. Теперь вы подключили выход к коду, и он будет распознавать pieChartView var как объект, а не nil, который в настоящее время есть.

Вот так это выглядит

У меня была точно такая же ошибка с тем же кодом.

Как Smozgur предложить, я проверил для подключения Iboutlet, но он, кажется, был связан нормально

Проблема заключалась в том, что я установил неправильный модуль, поэтому проверьте "цель модуля" тоже, я надеюсь, что это может быть полезно для кого-то:)

Другие вопросы по тегам