gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:30:00 25 4
gpt4 key购买 nike

我有一个应用程序,它在 AppStore 中存在多年并且运行没有任何崩溃(最后部署目标 iOS 12.4)。我有一些代码可以在应用程序中的某些事件上播放声音。

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

线程1:EXC_BAD_ACCESS(代码=1,地址=0x48)Shows the error message

:在将该问题标记为“重复”之前,请考虑这一定与 iOS13 的发布有关,因为之前它没有发生并且代码只是“通常”。

这是我的代码,也在 gitHub 上.

我的 ViewController 中有一个属性可以防止 ARC 释放我的 AVAudioPlayer:

private var mySoundPlayer: AVAudioPlayer = AVAudioPlayer()

我有一个例程,应该执行“播放声音”(当分配 AVAudioPlayer 的新实例时,会发生错误。resourceURL 不是问题,重新分配是这个问题,我使用未分配的新实例进行了测试,并且没有崩溃。

// -------------------------------------------------
// 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)") }
}

在这里,我在 viewDidLoad() 的某处调用了该子例程,延迟了 2 秒。

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.makeSoundEvent(.startFanfare)
}

我认为由于异步线程,它在某种程度上不起作用。但由于它在主线程上,我认为这应该可行。

最佳答案

只要去掉初始化就可以了

private var mySoundPlayer: AVAudioPlayer!

干杯!!!

关于ios - 在 iOS13 中重新分配 AVAudioPlayer 实例会导致 BAD_ACCESS 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58166133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com