2016-10-27 8 views
0

Ich habe Schwierigkeiten mit einem Klassenprojekt von mir. Ich muss eine Ansicht mit einem Picker mit zwei Komponenten erstellen. Wenn ich die Zeile in der ersten Komponente auswähle, muss sie die Optionen der zweiten Komponente aktualisieren. Mein Problem ist, dass ich eine Ausnahmebegrenzung erhalte, wenn ich beide Komponenten gleichzeitig verschiebe. Irgendwelche Tipps?Picker Out of Bounds Exception

Es gibt Code für einen Slider, der zusätzlich aktualisiert wird, wenn der Picker aktualisiert wird und umgekehrt. Mein Code ist:

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) 
} 
} 

Fehler kommen ist:

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

Was ist die vollständige und genaue Fehlermeldung? Welche Zeile verursacht den Fehler? Bitte geben Sie diese Information in Ihre Frage ein (schreiben Sie sie nicht als Kommentar). – rmaddy

+0

Hinzugefügt im Fehler am Ende des Beitrags. Danke für die Köpfe hoch! – juareza

+0

Nichts davon ist die relevanten Informationen gefragt. – rmaddy

Antwort

0

ich den Grund für Absturz gehe davon tritt auf der unterhalb der Linie

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

Wenn Sie int-Wert von mehr setzen als 2 von 0 in der obigen Zeile. dann erhalten Sie den oben genannten Fehler. Weil Komponente 1 der Picker-Array von Anzahl 3 nur

Verwandte Themen