Ответ на этот вопрос оказывается очень простым, но его также сложно определить, если вы ищете неправильное место.
Прежде чем мы добавим наших наблюдателей, нам нужно начать генерировать уведомления о воспроизведении:
musicPlayerController.beginGeneratingPlaybackNotifications()
NotificationCenter.default.addObserver(self,
selector: #selector(refreshView),
name: .MPMusicPlayerControllerPlaybackStateDidChange,
object: musicPlayerController)
NotificationCenter.default.addObserver(self,
selector: #selector(refreshView),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: musicPlayerController)
Нам также нужно помнить, чтобы завершить генерацию их, когда мы покидаем (освобождаем) представление:
deinit {
NotificationCenter.default.removeObserver(self, name: .MPMusicPlayerControllerPlaybackStateDidChange, object: nil)
NotificationCenter.default.removeObserver(self, name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: nil)
musicPlayerController.endGeneratingPlaybackNotifications()
}
Путаница возникла из-за того, что musicMediaPlayer возвратил несколько уведомлений даже без этого, что не указывало на то, что мы не наблюдали все уведомления, которые запускались.
Примечание: Стоит отметить, что на момент написания этой статьи обсуждался вопрос о необходимости ручного удаления наблюдателей - я включил его здесь для полноты ответа.