在iOS13中重新分配AVAudioPlayer实例会导致BAD_ACCESS运行时错误

Luk*_*ker 5 exc-bad-access avaudioplayer ios swift

大家好,很遗憾,我坚持了下来,最近三天尝试了很多事情之后,我必须在这里寻求帮助

我有一个应用程序,已经在AppStore中使用了很多年,并且运行时没有崩溃(最新部署目标是iOS 12.4)。我有一些用于在应用程序中的某些事件上播放声音的代码。

现在,我尝试升级适用于iOS 13的应用程序,并且在不更改与该“ playSound”事物相关的任何代码的情况下,在真实设备上进行测试,总是会遇到此运行时错误。在模拟器上不会发生。

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)显示错误信息

:在将该问题标记为“重复”之前,请考虑这与iOS13的发布有关,因为在未发生之前,代码只是“正常”的。

这是我的代码,也在gitHub上

我的ViewController中有一个属性,可以防止ARC取消分配我的AVAudioPlayer:

private var mySoundPlayer: AVAudioPlayer = AVAudioPlayer()
Run Code Online (Sandbox Code Playgroud)

我有一个例程,应该在其中执行“播放声音”(在分配 AVAudioPlayer的新实例时会发生此错误。resourceURL不是问题,RE-ASSIGNING是问题,我使用新实例对其进行了测试没有被分配,我没有崩溃。

// -------------------------------------------------
// MARK: Private Methods
// -------------------------------------------------

private func makeSoundEvent(_ soundEvent : SoundEvent) {

    guard Settings().getSound() == .soundON else { return }
    guard let urlToRessource : URL = soundEvent.getFileURLToSoundRessource() else { return }
    do {
        mySoundPlayer = try AVAudioPlayer(contentsOf: urlToRessource)
        try? AVAudioSession.sharedInstance().setActive(true)
        mySoundPlayer.play()
    }
    catch { print("Could not create AVPlayer for ressource \(urlToRessource)") }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我有一个子例程的调用,它在我的viewDidLoad()中的某个位置,延迟了2秒。

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    self.makeSoundEvent(.startFanfare)
}
Run Code Online (Sandbox Code Playgroud)

我认为它由于异步线程而无法正常工作。但是由于它在主线程上,所以我认为这应该起作用。

感谢您的任何建议!