pickerView上的Swift致命错误

时间:2015-10-20 17:20:20

标签: ios swift uipickerview uisegmentedcontrol

我的程序有问题。我知道问题是什么,但不知道如何解决它。这是"超出范围错误"。当我点击分段控制按钮时,它会切换pickerView的数组,但是当我几乎在数组的末尾时崩溃。我尝试使用reloadAllComponents但它没有显示任何内容。

类Sec​​ondViewController:UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {

@IBOutlet weak var segmentControl: UISegmentedControl!
@IBOutlet weak var tempPickerView: UIPickerView!
@IBOutlet weak var converterLabel: UILabel!


@IBAction func switcherConverter(sender: AnyObject) {
    switch(self.segmentControl.selectedSegmentIndex){
    case 0:
        break;
    case 1:
        break;
    default:
        break;
    }
}


var pickerData = Array(-129...134)
var pickerData2 = Array(-90...60)



override func viewDidLoad() {
    super.viewDidLoad()

    tempPickerView.dataSource = self
    tempPickerView.delegate = self
    [self.tempPickerView .reloadAllComponents()]
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if(segmentControl.selectedSegmentIndex == 0){
    return pickerData.count
    }else{
        return pickerData2.count
    }
}

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

    if(segmentControl.selectedSegmentIndex == 0){
        return "\(pickerData[row]) °F"
    }
    else {
        pickerView.reloadAllComponents()
        return "\(pickerData2[row]) °C"

    }

}


func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if(segmentControl.selectedSegmentIndex == 0){
        let celsius = (Double(pickerData[row]-32) / 1.8)

        let formatter = NSNumberFormatter()
        formatter.numberStyle = NSNumberFormatterStyle.NoStyle

        let formattedCelsiusString = formatter.stringFromNumber(celsius)!


        converterLabel.text = "\(formattedCelsiusString) °C"

    }

    else {



        let fahrenheit = ((Double(pickerData2[row]) * 1.8) + 32 )

        let formatter = NSNumberFormatter()
        formatter.numberStyle = NSNumberFormatterStyle.NoStyle

        let formattedFahrenheitString = formatter.stringFromNumber(fahrenheit)!

        converterLabel.text! = "\(formattedFahrenheitString) °F"


    }

}

}

1 个答案:

答案 0 :(得分:1)

尝试在tempPickerView.reloadAllComponents()

中致电switcherConverter