在哪种情况下,audioSession.currentRoute.outputs为空?

时间:2018-12-31 14:45:53

标签: ios objective-c iphone

我有一个移动应用程序。它具有一些播放音频。它可以在我的设备上正常运行,但是在Crashlytic中我收到了很多来自真实用户的崩溃。简单来说,我的代码是:

- (void) checkAndResetAudioSession {
.
.
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
.
.
AVAudioSessionPortDescription * outputPort = [audioSession.currentRoute.outputs objectAtIndex:0];
.
}

我崩溃了,上面写着:

Fatal Exception: NSRangeException
0  CoreFoundation                 0x106eb3ea0 __exceptionPreprocess
1  libobjc.A.dylib                0x106085a40 objc_exception_throw
2  CoreFoundation                 0x106dc5a90 -[__NSCFArray count]
3  MyApp                          0x303b235e4 -[AudioSessionManager checkAndResetAudioSession] (AudioSessionManager.mm:100)
.
.

据我了解,它由于试图到达audioSession.currentRoute.outputs变量的第0个索引对象而崩溃。这意味着输出应该为空。 在哪种情况下,audioSession.currentRoute.outputs可以为空?据我了解,它是输出设备。因此,至少应该始终有一个输出设备。

其他信息,如我所见,此问题几乎总是发生在iOS 12中,并且大多数情况下是iPhone X,7和7以及以上版本(这3台设备中有50%崩溃)。

0 个答案:

没有答案