2017-12-02 6 views
0

uipickerviewを使用して曲を選択しています。問題は、ピッカービューとやり取りせずに(つまり、ピッカービューで既に選択/ロードされている最初の曲を再生しようとしている)プレイを押しているときです。uipickerviewデフォルトの行を選択する

致命的なエラー:オプションの値

私はdidSelectRowためのセット以下のコードがあります。

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

      musicChoice = songs[row] 
    } 

を私は理解して、ユーザーがスクロール一度こののみを開始が/ピッカービューと対話する - ので、私は何とかselectedRowを使用しようとしていますしかし、どんなアイデアを台無しにしていますか?以下

更新pickerviewコード:

var songs:[String] = [] 
var musicChoice = "Something" 

let foods = ["Apples", "Bananas", "Corn", "Beans", "Tomatoes"] 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return songs[row] 

} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return songs.count 
} 



func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    musicChoice = songs[row] 

} 

答えて

1

ザ・セレクト行法を行った自己それを説明にあるdidSelectRowので、あなたはそれがどんなものを初期化していない行と相互に作用することなく、右にあると言います。

選択した行の代わりに、再生する最初の曲の値をいつでも初期化できます。すなわち

musicChoice変数を宣言している間です。それは目的を解決するだろう。

+0

私はそれをやろうとしましたが、musicChoice変数を宣言する前ではなく、ピッカーのビューコードの後に​​曲[0]を使用できると書いています。 – Berro

+0

あなたの 'playSong'メソッドはあなたのピッカーのビューデリゲートコードとはまったく違うはずなので、前もって初期化すればピッカービューに触れることなく曲[0]を使うことができます。 UIViewControllerクラスのコード全体を共有していただけますか? – Jeet

+0

ペーストをコピーしようとしていて、曲がアレーに追加された直後にあなたの提案を追加したいと思っていました。この方法で、曲が曲の配列に追加された後、musicChoiceが自動的に曲の配列の最初の項目(常に最初の曲である必要があります)に入力され、常にこれが常に最初のオプションとして表示されますピッカーのビュー - または私は間違っている? – Berro

関連する問題