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

Я использую свойство музыкального проигрывателя для контроллера 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 player закрывается, консоль печатает:

MediaPlayer: Message playbackState timed out.

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

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

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

Мои вопросы:

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

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

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

Ответ 1

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

Добавить:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

в viewDidLoad.

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