2016-10-27 12 views
0

私はクラスプロジェクトでいくつかの問題を抱えています。 2つのコンポーネントを持つピッカーでビューを作成する必要があります。最初のコンポーネントの行を選択すると、2番目のコンポーネントのオプションを更新する必要があります。私の問題は、両方のコンポーネントを同時に動かすときに境界外の例外が発生していることです。任意のヒント?Picker Out of Bounds例外

ピッカーの更新時に追加で更新されるスライダのコードがあり、その逆もあります。私のコードは次のとおりです。来る

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

私はクラッシュの原因を想定していますが、より多くのint型の値を設定している場合は、以下の行に

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

を発生します上記の行の0から2までの範囲です。上記のエラーが発生します。ピッカーのコンポーネント1にカウント3の配列があるため