我有一个移动应用程序。它具有一些播放音频。它可以在我的设备上正常运行,但是在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%崩溃)。