Я занимаюсь разработкой приложения, которое прослушивает изменения песен MPMusicPlayerController.
Для этого я добавляю следующего наблюдателя:
NotificationCenter.default
.addObserver(self,
selector: #selector(systemSongDidChange(_:)),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: nil)
Проблема заключается в том, что при уведомленииnowPlayingItem
, который можно найти в (notification?.object as? MPMusicPlayerController)!.nowPlayingItem
, всегда nil
.
Я делаю что-то не так или есть какой-то особый трюк, который нужно сделать, чтобы получить фактический nowPlayingItem
?
Вот более полный код:
// ...
init() {
let systemPlayer = MPMusicPlayerController.systemMusicPlayer
NotificationCenter.default.addObserver(self,
selector: #selector(systemSongDidChange(_:)),
name: .MPMusicPlayerControllerNowPlayingItemDidChange,
object: systemPlayer)
player.beginGeneratingPlaybackNotifications()
}
private func systemSongDidChange(notification: Notification) {
let currentSong = (notification.object as? MPMusicPlayerController)?.nowPlayingItem
// `currentSong` is always `nil` =/
}
// ...
Плеер, который я использую, - это музыкальный проигрыватель Apple.Я не играю песни из облака.