MPMusicPlayerController:结合iPodMusicPlayer和applicationMusicPlayer以防止继续下一个轨道

我有点奇怪的问题。 我有一个使用[MPMusicPlayerController iPodMusicPlayer]的音乐应用程序。 一切都很好,通知会在曲目更改和播放状态更改时触发。

我有一个屏幕,用户需要查看一首歌曲,我不希望他继续他的队列中的下一首歌曲。 由于没有委托方法来跟踪音轨何时改变(仅DID改变),为了防止音乐播放器继续到下一个音轨我使用新的[MPMusicPlayerController applicationMusicPlayer] ,给它iPodMusicPlayer当前正在播放的歌曲,一切都很好。 没有新的曲目可以继续,而且我没有触及原来的iPodMusicPlayer队列所以理论上,当我关闭这个屏幕再次使用iPodMusicPlayer时,一切都应该是完美的。

但是,当用户在此屏幕上完成并关闭它时, iPodMusicPlayer现在突然中断,通知未被调用,当我将应用程序置于后台时,音乐停止播放,让我相信iPodMusicPlayer现在实际上是applicationMusicPlayer

好的,所以我的问题基本上是:我需要一种方法来阻止音乐播放器继续到队列中的下一个音轨。 如上所述,切换到具有一个轨道的applicationMusicPlayer似乎打破了东西。 什么是最好的解决方案?

编辑 :因为这可能有点难以理解,我创建了一个小项目来显示问题: https : //github.com/kevinrenskers/MPMusicPlayerControllerTest 。 在播放音乐时打开应用程序,看到播放按钮的行为正确。 现在打开弹出窗口,再次关闭它,播放按钮被打破。

我找到了解决问题的方法:将repeatMode设置为MPMusicRepeatModeOne ,然后捕获MPMusicPlayerControllerNowPlayingItemDidChangeNotification通知。 您可以停止播放,但永远不会继续播放下一首曲目。 完成第二个屏幕后,我将repeatMode重置为原始值。