MPMusicPlayerController: iPod прекращает отправку уведомлений, когда приложение iPod закрывается в фоновом режиме - PullRequest
10 голосов
/ 21 августа 2010

Я использую свойство музыкального проигрывателя для контроллера проигрывателя iPod.

// .h
@property (nonatomic, retain) MPMusicPlayerController *ipodPlayer;

// .m
ipodPlayer = [MPMusicPlayerController iPodMusicPlayer];

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

[notificationCenter addObserver:self selector:@selector(changedPlaybackState:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:ipodPlayer];
[notificationCenter addObserver:self selector:@selector(changedNowPlayingItem:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:ipodPlayer];

[ipodPlayer beginGeneratingPlaybackNotifications];

Во время фоновой обработки, если приложение iPod проигрывателя закрывается, консоль выводит:

MediaPlayer: Message playbackState timed out.

Еслион не падает (или зависает, замедляя работу), уведомление больше не отправляется моим методам наблюдения.Я все еще могу отправлять сообщения типа:

[ipodPlayer pause];
[ipodPlayer play];
[ipodPlayer skipToNextItem];
[ipodPlayer skipToPreviousItem];

, но не могу получать уведомления

Мои вопросы:

  1. Есть ли способ переназначить, перезагрузитьуказатели во время выполнения?Как я могу восстановить свойство равным так же, как при его первом запуске?
  2. Как мне перехватить сообщение: «MediaPlayer: Время воспроизведения сообщения истекло.»в консольном выводе? Это не похоже на использование NSLog.

Спасибо за помощь.

ОБНОВЛЕНО: Похоже на использование assignили weak для свойства ipodPlayer было решением.Кроме того, доступ к нему осуществляется с предположением, что собственность может отсутствовать.После многих испытаний и года фактического использования его в моем приложении, я думаю, что это было правильное решение.

1 Ответ

1 голос
/ 19 ноября 2011

У меня была похожая проблема с моим MpMoviePlayerController в iOS 5. Я нашел исправление, которое позаботилось об этом.Это может работать и здесь.

Добавить:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

в viewDidLoad.

Больше моего другого поста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...