iOS图表库 - 无法将数据绑定到图表视图

问题描述:

我正在使用charts library并希望显示条形图。我面临着将数据绑定到图表的问题。这是我的代码。iOS图表库 - 无法将数据绑定到图表视图

class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

@IBOutlet weak var barChartView: BarChartView! 
@IBOutlet weak var yearDropDown: UIPickerView! 

@IBOutlet weak var rmDropDown: UIPickerView! 

@IBOutlet weak var txtYear: UITextField! 
@IBOutlet weak var txtRm: UITextField! 

var months = [String]() 


override func viewDidLoad() { 
super.viewDidLoad() 

     months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
     let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] 


     getYear() 
     setChart(dataPoints: months, values: unitsSold) 

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

func getYear() 
{ 
    url = RestMonitorServer.baseUrl + "/foo/bar" 
    Alamofire.request(url, method: .get, parameters: ["foo": bar,"foo":bar,"foo":bar]) 
     .responseJSON(){ 
    (response) in 
      print("get year list response ",response) 

      if ((response.result.value) != nil) { 
       let jsonData = JSON(response.result.value!) 

       if jsonData["duration"].arrayObject != nil { 
        self.durationArray.append("duration") 
        print("duration array ", self.durationArray) 
       } 

      } else if (((response.error)) != nil) { 
       let jsonError = response.error 
       print("Error in getting year list ", jsonError as Any) 
      } 

    } 

} 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

    return durationArray.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 


    if pickerView == yearDropDown { 

     let titleRow = durationArray[row] 

     return titleRow 
    } 
    return "" 
} 

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

    var dataEntries: [BarChartDataEntry] = [] 

    for i in 0..<dataPoints.count { 
     let dataEntry = BarChartDataEntry(x:values[i],y:Double(i)) 
     dataEntries.append(dataEntry) 
    } 
    print("data entries ",dataEntries) 
    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") 
    print("chart data set ", chartDataSet) 
    let chartData = BarChartData(dataSets: [chartDataSet]) 
    print("chart data ",chartData) 
    barChartView.data = chartData //error at this line as fatal error: unexpectedly found nil while unwrapping an Optional value 
    print("bar chart data" , barChartView.data!) 
} 

}

这是我的全部代码。我得到的错误是我已经如上所述初始化的barChartView,但它仍然给我错误。

感谢

+0

是你的'barChartView'零?你有创建实例吗? – Tj3n

+0

我已检查您的代码在我身边完美工作 –

+0

代码在我身边也能正常工作!如果您没有使用插座查看图表,请确保您已初始化“barChartView”。 –

按我的EXP您需要将功能转移到BarChartView扩展象下面这样:

extension BarChartView { 

    func setBarChartData(xValues: [String], yValues: [Double], label: String) { 

     var dataEntries: [BarChartDataEntry] = [] 

     for i in 0..<yValues.count { 
      let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i]) 
      dataEntries.append(dataEntry) 
     } 

     let chartDataSet = BarChartDataSet(values: dataEntries, label: label) 
     let chartData = BarChartData(dataSets: [chartDataSet]) 

     self.data = chartData 

    } 
} 

并调用它象下面这样:

override func viewDidLoad() { 
     super.viewDidLoad() 
     barChartView.setBarChartData(xValues: months, yValues: unitsSold, label: "Monthly Sales") 
} 

试试这个,让我知道它是否工作。

还有一件事是你设置月的静态数据&值我的问题是你在哪里填写服务器响应数据?