2016-10-27 8 views
0

У меня проблемы с моим классом. Мне нужно создать представление с помощью сборщика с двумя компонентами. Когда я выбираю строку в первом компоненте, ей необходимо обновить параметры второго компонента. Моя проблема в том, что я получаю исключение из-за пределов при одновременном перемещении обоих компонентов. Какие-нибудь советы?Picker Out of Bounds Exception

Существует код для ползунка, который дополнительно обновляется как обновления сборщика и наоборот. Мой код:

import UIKit 
class FirstViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 
@IBOutlet weak var FoodPicker: UIPickerView! 
@IBOutlet weak var FoodSlider: UISlider! 

let Countries = ["India","USA","Mexico"] 
let IndianFood = ["Avakaya","Pesarattu","Thukpa","Thali","Litti Chokha","Maple","Palak Paneer","Rajma-Shawl","Vindaloo","Khaman","Handva","Bisi bele bath","Pav Bhaji","Eromba","Chungdi Jhola"] 
let USFood = ["Hot Dog","Pizza","Hamburger","Clam Chowder","Succotash","Fried Chicken","Gumbo","Grits","Chitterlings","Hushpuppies","Cobbler"] 
let MexicanFood = ["Taco","Quesadilla","Pambazo","tamal","huarache","Alambre","Enchilada","Panita","Gordita","Tlayuda","Sincronizada"] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    FoodPicker.dataSource = self 
    FoodPicker.delegate = self 
} 

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

//MARK: - Picker Creation 
// returns the number of 'columns' to display. 
public func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 2 
} 

// returns the # of rows in each component.. 
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    switch component { 
    case 1: 
     switch FoodPicker.selectedRow(inComponent: 0) { 
     case 1: 
      return USFood.count 
     case 2: 
      return MexicanFood.count 
     default: 
      return IndianFood.count 
     } 
    default: 
     return Countries.count 
    } 
} 

//MARK: - Picker Delegate 
//returns picker row names 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    switch component { 
    case 1: 
     switch FoodPicker.selectedRow(inComponent: 0) { 
     case 1: 
      return USFood[row] 
     case 2: 
      return MexicanFood[row] 
     default: 
      return IndianFood[row] 
     } 
    default: 
     return Countries[row] 
    } 
} 

//MARK: - Picker Updater 
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if 0==component { 
     FoodPicker.reloadComponent(1) 
     switch row { 
     case 1: 
      FoodSlider.maximumValue = Float(USFood.count-1) 
     case 2: 
      FoodSlider.maximumValue = Float(MexicanFood.count-1) 
     default: 
      FoodSlider.maximumValue = Float(IndianFood.count-1) 
     } 
    } 
    if 1==component { 
     FoodSlider.setValue(Float(row), animated: true) 
    } 
} 

@IBAction func sliderSelector(_ sender: AnyObject) { 
    FoodPicker.selectRow(Int(FoodSlider.value), inComponent: 1, animated: true) 
} 
} 

Ошибка подходя является:

2016-10-26 21:21:15.943915 assignment4[10836:5039575] subsystem: com.apple.UIKit, category: Feedback, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0 
fatal error: Index out of range 
(lldb) 
+1

Какое полное и точное сообщение об ошибке? Какая строка вызывает ошибку? Пожалуйста, поместите эту информацию в свой вопрос (не публикуйте их в качестве комментария). – rmaddy

+0

Добавлен в сообщение об ошибке в нижней части сообщения. Спасибо за головы! – juareza

+0

Ничего из этого не требуется. – rmaddy

ответ

0

Я предполагаю, что причина аварии происходит на следующей строке

@IBAction func sliderSelector(_ sender: AnyObject) { 
    FoodPicker.selectRow(Int(FoodSlider.value), inComponent: 1, animated: true) 
} 

Если вы настраиваете INT значение более чем 2 в диапазоне от 0 в приведенной выше строке. то вы получите вышеуказанную ошибку. Поскольку компонент 1 сборщика имеет только массив из числа 3

Смежные вопросы