MPMusicPlayerController:当iPod App在后台终止时,iPod停止发送通知
问题描述:
我正在为iPod播放器控制器使用音乐播放器属性。MPMusicPlayerController:当iPod App在后台终止时,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:Message playbackState超时。”在控制台输出?这不像使用NSLog。
谢谢你帮助我。
更新: 好像使用assign
或weak
为ipodPlayer财产的解决方案。此外,访问它是假设该物业可能不在那里。经过多次试用和一年的实际使用后,我认为这是正确的解决方案。
答
我在iOS 5中遇到了与我的MpMoviePlayerController
类似的问题。我找到了解决方法。它也可以在这里工作。
地址:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
在viewDidLoad
。
更多我的其他post
+0
谢谢你回答这个旧帖子。由于我没有使用'AVAudioPlayer',我不知道这是否适合我。相反,我确定使用弱分配对于iPodPlayer属性,并且自从像这样使用它之后,崩溃的发生几乎不会发生。猜猜它与引用一个不属于我的对象有关。不管怎么说,还是要谢谢你 – petershine 2011-11-21 01:18:22
您使用的是iOS 5吗?如果没有,那么你应该这样做: self.ipodPlayer = [MPMusicPlayerController ...] 否则在理论上,由iPodMusicPlayer创建的实例将被收集,并且您还没有加入ref计数,因此您将得到一个空指针在某一点。除非您在每次与音乐播放器进行互动之前调用此方法,这可能是您遇到问题的另一个原因。一个实例被收集,你不会将自己附加到新的实例? – hktegner 2011-12-12 08:54:47
感谢您评论这篇旧文章。我改变了我的访问这个ipodPlayer属性的流程,因为它可能不存在。所以,我让属性使用'assign'或'weak',并用'[MPMusicPlayerController iPodMusicPlayer];'将其初始化;'只要它不存在 – petershine 2011-12-13 01:49:58