应用程序因 AVAudioSession privateBeginInterruption 而崩溃

Posted

技术标签:

【中文标题】应用程序因 AVAudioSession privateBeginInterruption 而崩溃【英文标题】:App crashes with AVAudioSession privateBeginInterruption 【发布时间】:2013-02-22 01:20:44 【问题描述】:

我正在设备(音板)上测试我的应用程序,它因EXC_BAD_ACCESS 而崩溃,我使用了断点,错误来自[AVAudiosession privateBeginInterruption]

崩溃按照以下模式发生:

    应用启动,我们看到主菜单 按下主菜单按钮并加载(按下)音板视图,在此处按下某些按钮并播放声音。 返回主菜单 ([self.navigationController popViewControllerAnimated:YES];) 应用进入后台 当应用进入前台并按下音板的菜单按钮时,应用会崩溃。

我不知道这里发生了什么,我安装了 CrashLytics,它只说:

也许音频会话从内存中释放,应用程序尝试访问它并失败?

音频会话在viewDidLoad中初始化

//  Initialize audio session
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: nil];

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof    (audioRouteOverride),&audioRouteOverride);  

viewDidUnload我有

[[AVAudioSession sharedInstance] setDelegate: nil];

有什么提示吗?

谢谢!

【问题讨论】:

启用僵尸后重试。 虽然我使用的是带有 Swift 的 iOS 8 并且不推荐使用委托属性 - 这个问题帮助我解决了我的 EXC BAD ACCESS 问题。我忘记删除录音机的代表,这使我的应用程序因 EXC BAD ACCESS 错误而崩溃,这使得很难识别问题。谢谢大家! 【参考方案1】:

发生崩溃是因为您在这一行中将 session 的委托设置为您的控制器

[[AVAudioSession sharedInstance] setDelegate: self];

但没有实现所需的委托方法(中断一)

要么删除委托设置行,要么实现委托方法来解决崩溃

【讨论】:

我已经删除了委托设置,并且不再出现崩溃。谢谢!

以上是关于应用程序因 AVAudioSession privateBeginInterruption 而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioSession 时背景音频安静

何时使用AVAudioSession.setActive?

禁用 AVAudioSession 后 Unity 声音不起作用

AVAudioSession

AVAudioSession 配置用于录制和与他人一起播放

AVAudioSession 学习笔记