crash - MPMusicPlayerController:当 iPod App 在后台终止时,iPod 停止发送通知

标签 crash background notifications ios mpmusicplayercontroller

我正在为 iPod 播放器 Controller 使用音乐播放器属性。

// .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];

但是收不到任何通知

我的问题是:

  1. 有没有办法在运行时重新分配、重新加载指针?如何将属性恢复到刚启动时的状态?
  2. 如何捕捉消息:“MediaPlayer:消息播放状态超时。”在控制台输出中?这不像使用 NSLog。

谢谢你帮助我。

更新: 似乎对 ipodPlayer 属性使用 assignweak 是解决方案。此外,访问它是在假设该属性可能不存在的情况下完成的。经过多次试验并在我的应用程序中实际使用它一年后,我认为这是正确的解决方案。

最佳答案

我在 iOS 5 中的 MpMoviePlayerController 也遇到了类似的问题。我找到了解决该问题的修复程序。它也可能在这里工作。

添加:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

viewDidLoad 中。

更多我的其他post

关于crash - MPMusicPlayerController:当 iPod App 在后台终止时,iPod 停止发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538653/

相关文章:

ios - 消息发送到已释放的实例

css - 在 iPad 的 Safari 中纠正背景缩放的方法?

Java 内存管理 : iOS style memory monitoring?

twitter-bootstrap - Bootstrap 4 snackbar / toast

r - 当 `Esc` 在 R 中不起作用时,如何停止运行函数?

android - 由于 RECEIVE_SMS 权限被拒绝,Cordova Android 应用程序在 Android P 上崩溃

linux - 从后台进程重定向标准输出和标准错误

php - 未定义索引 : user when I display notification json array in laravel

c - setjmp longjmp 在 Netbeans cygwin Windows XP 下崩溃

java - 根据 If 语句更改 JOptionPane 背景颜色