我在应用程序中有一个播放器控件,该控件是系统音乐播放器的控件(上一个播放/暂停下一个)。
为了显示正确的播放/暂停状态,我向MPMusicPlayerControllerPlaybackStateDidChange通知添加了一个观察者。
Apple Music App运行时,一切运行顺利。但是,如果我关闭Apple Music应用程序并在应用程序中按触发playPause()函数的播放按钮,则在处理新的MPMusicPlayerControllerPlaybackStateDidChange通知并尝试获取当前的播放状态后,应用程序立即崩溃。
func playPause() {
let isPlaying = MPMusicPlayerController.systemMusicPlayer.playbackState == .playing
isPlaying ? controller.pause() : controller.play()
}
处理该通知的代码:
@objc
private func onPlayBackStateChanged() {
let playbackState = MPMusicPlayerController.systemMusicPlayer.playbackState // <<< This line crashes the app
updatePlaybackState(playbackState)
}
在崩溃之前,我收到以下日志:
2020-03-25 13:46:20.471063+0200 MYAPP[405:14911] [SDKPlayback] prepareToPlay failed [no target descriptor]
2020-03-25 13:46:33.305925+0200 MYAPP[405:14911] [SDKPlayback] prepareToPlay failed [no target descriptor]
2020-03-25 13:46:41.498197+0200 MYAPP[405:15072] [SDKPlayback] systemMusicPlayer connection invalidated
此代码与iOS <13.3x兼容,但不适用于iOS 13.4。
是来自Apple的这个新错误,还是我做错了什么?如何解决这个错误?
最佳答案
我遇到了完全相同的问题-该功能在iOS 13.3中工作正常,但在13.4中出现了问题。我通过反馈助手向Apple提交了一个错误。他们能够重现该问题,并且iOS 13.5 beta 4中有一个修复程序(该修复程序对我有用)。
应该在13.5的发行版本中修复。
关于ios - iOS 13.4访问MPMusicPlayerController.systemMusicPlayer使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60848429/