Как узнать, когда MPMusicPlayerController меняет игровой элемент естественным образом

new File("/path/directory").mkdirs();

Здесь «каталог» - это имя каталога, который вы хотите создать / существующего.

1
задан simon_smiley 16 January 2019 в 21:21
поделиться

1 ответ

Ответ на этот вопрос оказывается очень простым, но его также сложно определить, если вы ищете неправильное место.

Прежде, чем мы добавим наших наблюдателей, нам нужно начать генерировать уведомления о воспроизведении:

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, который возвращал несколько уведомлений даже без этого, что не указывало на тот факт, что мы не наблюдали все уведомления, которые были запущены.

Примечание: Стоит отметить, что на момент написания этой статьи обсуждался вопрос о необходимости ручного удаления наблюдателей - я включил его здесь для полноты ответа.

0
ответ дан simon_smiley 16 January 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: