10774


`AVAudioPlayer`とテーブルビューを使用して音楽を再生しようとしています。

  1. アプリを起動すると曲一覧のテーブルページが表示されます。
  2. その中から一つ選択すると、選択された曲が再生されます。

ここで、もう一度同じテーブルから曲を選択すると、音楽が同時に再生されてしまいます。  
テーブルで曲を選択すると同時に、現在再生している曲は停止し、新しく選択された曲を再生する方法はないでしょうか？  
`didSelectRowAtIndexPath`のはじめに`player.stop()`を記述してもnilでアプリが落ちてしまいます。

現在以下のようなコードで構成しています。

[code]

    let getSongURL: NSURL = MPMediaItemのAssetURL
    player = AVAudioPlayer(contentsOfURL: getSongURL, error: nil)
    player.play()
    
[/code]

アドバイスお願いします。


CC BY-SA 3.0
2015-05-29T13:16:27.130
10769
2015-05-29T14:59:50.903
9857
question
ios swift avfoundation
AVAudioPlayerで複数同時に音楽が再生されてしまう。


該当箇所のコードが無いため断言できませんが、方針自体は`player.stop()`で良くて _nilでアプリが落ちてしまう_ ことが問題なのだと思います。

例えば`player.stop()`を`player?.stop()`に変更するなど、nilを許容する処理にしてみてはいかがでしょうか。


CC BY-SA 3.0
2015-05-29T13:42:58.913
10770
2015-05-29T13:42:58.913
5750
10769
answer

[code]

    let getSongURL: NSURL = MPMediaItemのAssetURL
    player = AVAudioPlayer(contentsOfURL: getSongURL, error: nil)
    player.play()
    
[/code]

この処理をどこに書いていてplayerという変数をどこに保持しているのかはっきり書かれていませんが、おそらくこのplayerという変数を保持しているオブジェクトインスタンスが複数存在していて、playerも複数存在している状態なのではないかと思います。playerをAppDelegateのようにアプリでただ一つ存在する場所に保持すればうまくいくと思います。画面遷移のない1枚画面ならUIViewControllerに保持してもよいかもしれません。


CC BY-SA 3.0
2015-05-29T14:59:50.903
10774
2015-05-29T14:59:50.903
9367
10769
answer