崩溃 – MPMusicPlayerController:当iPod App在后台终止时,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播放器应用程序被终止,控制台将打印出来:

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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...