我正在使用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];
但不能收到任何通知
我的问题是:
>有没有办法重新分配,在运行时重新加载指针?如何恢复属性就像首次启动时一样?
>我如何抓住这个消息:“MediaPlayer:消息回放状态超时.”在控制台输出?这不像使用NSLog.
感谢你们对我的帮助.
更新:
似乎使用assign或weak的ipodPlayer属性是解决方案.此外,访问它是通过假设属性可能不在那里完成.经过多次试用和一年的实际使用,在我的应用程序,我认为这是正确的解决方案.
解决方法
我在iOS 5中与我的MpMoviePlayerController有类似的问题.我找到了一个照顾它的修复程序.它也可能在这里工作.
加:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
在viewDidLoad.
更多我的其他post