noitatocx0の技術メモ置き場

コーディング関連で解決に時間がかかったものを適当に書く

MPMusicPlayerControllerのshuffleModeはsetQueueされていないと変更できない

setQueueメソッドで再生する曲一覧を設定する前にshuffleModeやrepeatModeを変更しようとすると以下のようなエラーがログに出力される。

[SDKPlayback] -[MPMusicPlayerController setShuffleMode:3] completed error: Error Domain=MPCPlayerRequestErrorDomain Code=1 "No commands provided." UserInfo={NSDebugDescription=No commands provided.}

 

どうもMPMusicPlayerControllerのshuffleModeやrepeatModeといったプロパティはMPMusicPlayerController自身のフラグというよりも、MPMusicPlayerControllerが持つキューに紐付いているっぽい。

 

まあ、確かにキューの中の曲一覧に対してシャッフルやリピートをすると考えれば、自然ではあるかも。

 

というわけでviewDidLoad内で事前にsetQueueすることで解決した。

 

   override func viewDidLoad() {

        super.viewDidLoad()

        

 

     --中略--       

        //再生キューの設定

        let songs = targetAlbum!.items

        musicPlayer.setQueue(with: MPMediaItemCollection(items: songs))

        musicPlayer.nowPlayingItem = songs[0]

        

    }

 

 

ついでに画面表示してすぐに再生ボタン押された時に、曲が再生されなかったのも解決されたし万事OK。