Я использую свойство музыкального проигрывателя для контроллера 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];
но не могу получать уведомления
Мои вопросы:
- Есть ли способ переназначить, перезагрузить указатели во время выполнения? Как восстановить свойство так, чтобы оно было таким же, каким оно было при первом запуске?
- Как я могу поймать сообщение: "MediaPlayer: время воспроизведения сообщения истекло". в выводе консоли? Это не похоже на использование NSLog.
Спасибо за помощь.
ОБНОВЛЕНО:
Кажется, что использование assign
или weak
для свойства ipodPlayer было решением. Кроме того, доступ к нему осуществляется с предположением, что собственность может отсутствовать. После многих испытаний и года фактического использования его в моем приложении, я думаю, что это было правильное решение.