在pickerView上发生Swift致命错误

问题描述:

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

类SecondViewController: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" 


    } 

} 

}

+0

开关没有做任何事情打电话tempPickerView.reloadAllComponents()。我只是想说明两个按钮之间的区别。在选择器视图函数我有if语句检查是否它的第一个或第二个按钮 – JoeDeerTee

尝试在​​

+0

谢谢,实际上解决了问题。我把reloadAllComponents放在错误的函数上。 – JoeDeerTee

+0

没问题,而且你做的事情你不需要'''switch''' –