我正在设备(音板)上测试我的应用程序,它因 EXC_BAD_ACCESS
而崩溃,我使用了断点,错误来自 [AVAudioSession privateBeginInterruption]
崩溃按照以下模式发生:
- 应用启动,我们看到主菜单
- 按下主菜单按钮并加载音板 View (按下),按下此处的一些按钮并播放声音。
- 返回主菜单 (
[self.navigationController popViewControllerAnimated:YES];
) - 应用进入后台
- 当应用进入前台并按下音板的菜单按钮时,应用会崩溃。
我不知道这里发生了什么,我安装了 CrashLytics,它只说:
也许 Audio Session 已从内存中释放,应用程序尝试访问它但失败了?
Audio Session 在 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];
有什么提示吗?
谢谢!
最佳答案
发生崩溃是因为您在这一行中将 session 委托(delegate)设置为您的 Controller
[[AVAudioSession sharedInstance] setDelegate: self];
但是没有实现需要的委托(delegate)方法(中断一)
要么去掉delegate设置行,要么实现delegate方法解决crash
关于ios - 应用程序因 AVAudioSession privateBeginInterruption 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15015300/