音楽プレーヤーを備えた iOS7 アプリケーションがあります。次のコードを使用して、MPMusicPlayerController からの再生状態の変化を確認し、UI を更新しています。より正確には、再生ボタンの外観を再生と一時停止の間で切り替えます。
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector (handle_NowPlayingItemChanged:)
name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object: self.musicPlayer];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector (handle_PlaybackStateChanged:)
name: MPMusicPlayerControllerPlaybackStateDidChangeNotification
object: self.musicPlayer];
[self.musicPlayer beginGeneratingPlaybackNotifications];
iPad または iPhone の iOS7 でアプリを実行すると、単一のコールバックではなく、次のシーケンスが返されます。
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[MyMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
PlaybackState 2 は MPMusicPlaybackStatePaused を意味し、曲が実際に再生されている間、アプリケーションが UI で間違った状態を表示する原因となります。コールバックが交互の値で 4 回呼び出されるのは意味がありません。
これは、キューのみを変更した場合に発生します。システムがキューを適切にクリアしていないようです。
これを解決する方法についてのアイデアはありますか?