2015-04-06 2 views
1

Я делаю музыкальный плеер, используя MPMusicPlayerController.systemMusicPlayer(), чтобы узнать Swift, и все идет хорошо, за исключением одной маленькой проблемы; всякий раз, когда музыка воспроизводится из моего приложения, а затем я переключаюсь на музыкальное приложение и завершаю его с помощью многозадачности, музыка останавливается, как ожидалось, но мое приложение падает, когда я переключаюсь на него. Я думал, что это может быть связано с тем, что я не устанавливал условие того, что должно произойти, когда музыка прекращается, и я не могу найти что-либо в Документах Apple, которые действительно помогают. Я попробовалКак я могу определить, прекращено ли приложение музыкальной музыки?

if (musicPlayer.playbackState == MPMusicPlaybackState.Interrupted) || (musicPlayer.playbackState == MPMusicPlaybackState.Stopped) 

не имеет никакой пользы. Может ли кто-нибудь дать представление о том, почему это происходит и/или решение? Вот пример моего кода:

override func viewDidLoad() { 
     super.viewDidLoad() 
     var notificationCenter = NSNotificationCenter.defaultCenter() 

     notificationCenter.addObserver(self, selector: "handlePlayingItemChanged", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: musicPlayer) 
     notificationCenter.addObserver(self, selector: "handlePlayState", name: MPMusicPlayerControllerPlaybackStateDidChangeNotification, object: musicPlayer) 

     musicPlayer.beginGeneratingPlaybackNotifications() 

     if (musicPlayer.playbackState == MPMusicPlaybackState.Playing) { 
      playButton.setImage(pause, forState: UIControlState.Normal) 
      setupCurrentMediaItem() 
      handleShuffleAndReplayMode() 
      self.isPlay = true 
     } else if (musicPlayer.playbackState == MPMusicPlaybackState.Paused) { 
      playButton.setImage(play, forState: UIControlState.Normal) 
      self.isPlay = false 
     } else if (musicPlayer.playbackState == MPMusicPlaybackState.Interrupted) || (musicPlayer.playbackState == MPMusicPlaybackState.Stopped) { 
      playButton.setImage(play, forState: UIControlState.Normal) 
      self.isPlay = false 
     } 
    } 
+0

Помогает ли использование 'applicationMusicPlayer'? 'MPMusicPlayerController' не очень хорош, почему бы не воспроизвести музыку с помощью AVPlayer? –

ответ

0

Если не удалить наблюдателей всегда будет сгенерировано исключение:

Вы добавили наблюдателей без условия для их удаления:

notificationCenter.addObserver... 

Remove Наблюдатели:

notificationCenter.removeObserver... 

Для получения более подробной информации - Key-Value Observing Programming Guide

Смежные вопросы