ios - 来自某些用户的 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
问题描述
虽然,我无法在我的测试设备/模拟器上复制这个问题,但我收到了一些用户的崩溃报告,但不是全部。EXC_BAD_ACCESS KERN_INVALID_ADDRESS 在这一行。为什么会这样,我可以采取哪些步骤来解决?崩溃报告来自 iOS 14.4.0 和 14.3.0 用户以及各种设备(iPhone 6s plus、iPhone 8 Plus、iPhone SE(第 2 代)、iPhone XS、iPhone 7、iPhone 7s、iPhone 11、iPhone 12、iPhone X)
在 PageViewController.m
// Voice Recording - Needed as workaround as there is a bug in AudioKit
NSArray *pathComponents = [NSArray arrayWithObjects:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
defaultVoiceRecording,
nil];
NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];
// Setup audio session to play through loud speakers
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if(error){
NSLog(@"AVAudioSession Sing the Note error tuner:%@",error);
}
// Setup audio session to play through loud speakers
if (![MenuViewController areHeadphonesPluggedIn]){ // EXC_BAD_ACCESS KERN_INVALID_ADDRESS here
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
if(error)
{
NSLog(@"Error: AudioSession cannot use speakers");
}
}
在 MenuViewController.h
+(BOOL)areHeadphonesPluggedIn;
在 MenuViewController.m
+(BOOL)areHeadphonesPluggedIn {
@try{
NSArray *availableOutputs = [[AVAudioSession sharedInstance] currentRoute].outputs;
for (AVAudioSessionPortDescription *portDescription in availableOutputs) {
if ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones]) {
return YES;
}
}
return NO;
}
@catch(id Exception){
return NO;
}
}
解决方案
+(BOOL)areHeadphonesPluggedIn {
@try{
NSArray *availableOutputs = [[AVAudioSession sharedInstance] currentRoute].outputs;
for (AVAudioSessionPortDescription *portDescription in availableOutputs) {
if ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones]) {
return YES;
}
}
return NO;
}
@catch(id Exception){
return NO; // Not sure it will work as you exect
}
return NO; // move return here!
}
推荐阅读
- python - 没有得到所有行beautifulsoup table,刮
- postgresql - postgresql 11 错误:“`”处或附近的语法错误
- flutter - Flutter:如何返回数据?
- javascript - usePreventScroll causes useLayoutEffect warning in Nextjs
- java - Android WorkManager: How to handle a growing number of worker with constraint?
- php - If We Validate User Is Logged In or Not, Do We Still Need To Use FORM Tokens To Avoid CSRF Attacks?
- matlab - Creating Clusters in matlab
- for-loop - 如何在 c 中的代码中使用 for 循环和函数获得 3 的倍数?
- python - 按年到月分组:数据透视表
- python-3.x - 如何将使用pyarmor加密的Python文件转换为exe文件