AVAudioSession currentRoute

时间:2017-06-20 13:57:35

标签: ios exc-bad-access avaudiosession

我们从应用收到了一些崩溃报告。它们看起来都很相似。调用[AVAudioSession currentRoute]位于每个崩溃堆栈的顶部:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)  
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000c0b25beb8  
Termination Signal: Segmentation fault: 11  
Termination Reason: Namespace SIGNAL, Code 0xb  
Terminating Process: exc handler [0]  
Triggered by Thread:  14  
...  

Thread 14 name:  
Thread 14 Crashed:  
0  libobjc.A.dylib  objc_msgSend + 16  
1  AVFAudio          -[AVAudioSession currentRoute] + 140 (AVAudioSession.mm:1715)  
...  

我们发现崩溃发生在AVAudioSessionRouteChangeNotification通知的处理程序中。在这个处理程序中,我们在自定义串行队列上发布异步调用,我们获取当前路由并枚举所有输出。

- (instancetype)init  
{  
    if (self = [super init])  
    {  
          _commandsQueue = dispatch_queue_create("com.app.commandsQueue", DISPATCH_QUEUE_SERIAL);  
          [[NSNotificationCenter defaultCenter] addObserver:self  
              selector:@selector(handleRouteChanged:)  
              name:AVAudioSessionRouteChangeNotification  
              object:nil];  
    }  
    return self;  
}  

- (void)handleRouteChanged:(NSNotification *)notification  
{  
    dispatch_async(self.commandsQueue, ^{  
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];  
        AVAudioSessionRouteDescription* currentRoute = audioSession.currentRoute;  
        for (AVAudioSessionPortDescription *outputPort in currentRoute.outputs)  
        {  
            if ([outputPort.portType isEqualToString:AVAudioSessionPortAirPlay])  
            {  
                // updating dictionary with status  
            }  
        }  
    });  
}  

我们无法重现该问题,我们不知道确切的情况。我们在不同的路线变化情景中玩了很多,但我们没有观察到崩溃。 有没有人知道这次崩溃的任何可能的根本原因?

0 个答案:

没有答案