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)
我认为它由于异步线程而无法正常工作。但是由于它在主线程上,所以我认为这应该起作用。
感谢您的任何建议!
小智 8
只需删除初始化,它就会工作
private var mySoundPlayer: AVAudioPlayer!
Run Code Online (Sandbox Code Playgroud)
干杯!!!
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |