嘿家伙,很遗憾,我坚持了下来,并且在最近三天尝试了很多事情之后,我必须在这里要求help。
我有一个应用程序,已经在AppStore中使用了很多年,并且运行时没有崩溃(最新部署目标是iOS 12.4)。我有一些用于在应用程序中的某些事件上播放声音的代码。
现在,我尝试为iOS 13升级我的应用程序,并且没有更改与该“ playSound”相关的任何代码,当在真实设备上进行测试时,总是得到此运行时错误。在simulator上不会发生。
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)
PLEASE:在将该问题标记为“ duplicate”之前,请考虑这与iOS13的发布有关,因为在此之前它没有发生,并且代码只是“通常的” “。
这是我的代码,也在gitHub上。
我在ViewController中具有一个属性,以防止ARC取消分配我的AVAudioPlayer:
private var mySoundPlayer: AVAudioPlayer = AVAudioPlayer()
我有一个例程,应该在其中执行“播放声音”(在assigning一个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)") }
}
这里我在viewDidLoad()中的某个地方调用了该子例程,延迟了2秒。
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.makeSoundEvent(.startFanfare)
}
我认为由于async线程,它以某种方式不起作用。但是由于它在主线程上,所以我认为这应该可行。
感谢您提供任何建议!
只需删除初始化,它将起作用
私人var mySoundPlayer:AVAudioPlayer!
干杯!
private var mySoundPlayer: AVAudioPlayer = AVAudioPlayer()
AVAudioPlayer
没有将init()
列为有效的初始化程序。 reference page显示了四个单独的初始化器,所有初始化器都至少带有一个参数。如果您在iOS 13.1之前的代码中使用上面的代码而没有崩溃,则表示您错误地初始化了音频播放器,可能只是很幸运,这不是问题。
[我不知道iOS 13.1中AVAudioPlayer
的具体更改是什么,但是release notes显示了很多与音频相关的更改,并且该类的某些更改似乎引入了对发生在初始化时间。
我遇到了几乎相同的问题。以前在Xcode12.4中起作用现在不在13.1中。感谢您提供以下帮助代码
导入UIKit导入AVFoundation
class Abdicate Def:UIViewController {
var play abdicatesound= URL(fileURLWithPath: Bundle.main.path(forResource: "abdicatesound", ofType: "wav")!)
var playerabdicate = AVAudioPlayer()
@IBOutlet weak var popupDef: UIView!
override func viewDidLoad() {
super.viewDidLoad()
popupDef.layer.cornerRadius = 10
popupDef.layer.masksToBounds = true
playerabdicate = try! AVAudioPlayer(contentsOf: play, fileTypeHint: nil) Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
getting error here
}
@IBAction func backButton(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
@IBAction func soundButton(_ sender: Any) {
player abdicatesound.play()
}
}