Прежде всего, вы должны вызвать это в viewDidLoad
или ранее, или уведомления не будут отправлены:
let musicPlayer = MPMusicPlayerController.systemMusicPlayer
musicPlayer.beginGeneratingPlaybackNotifications()
Вторая проблема связана с управлением памятью (цикл сохранения):
trackChangedObserver = NotificationCenter.default
.addObserver(forName: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: nil, queue: OperationQueue.main) { [weak self] notification -> Void in
self.updateTrackInformation() //!!!!!
}
Вы фиксируете здесь self
как сильную ссылку. И NotificationCenter
сохранит его навсегда, поэтому ваш ViewController никогда не будет уничтожен и метод deinit
не будет вызван. Чтобы исправить, добавьте [слабое я] к закрытию (как я делал выше).