В настоящее время я работаю над приложением, которое воспроизводит аудиоклип на основе состояния изображения/объекта.
В настоящее время я получаю этот код ошибки.
Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x48)
Я предполагаю, что это может быть ошибка при попытке воспроизвести другой аудиоклип в том же потоке, когда другой аудиоклип уже воспроизведен в том же потоке.
Но, честно говоря, я не уверен, я все еще изучаю потоки и многопоточность, поэтому, вероятно, доберусь сюда.
Что мне здесь не хватает? Как я могу воспроизвести второй аудиоклип (turnSaberOffAudio) без появления этого сообщения об ошибке? Спасибо!
Вот что происходит, когда я нажимаю на кнопку.
@objc func lightsaberTapped() {
print("lightsaber open!")
if lightsaberModel.isSaberOn == false {
UIView.animate(withDuration: 0.2, animations: {
self.saberImageHeightConstraint.constant = 530
self.saberImageWidthConstraint.constant = 210
self.mainView.layoutIfNeeded()
self.viewDidLayoutSubviews()
}, completion: nil)
lightsaberModel.turnSaberOnAudio.play()
lightsaberModel.isSaberOn = true
} else {
UIView.animate(withDuration: 0.2, animations: {
self.saberImageHeightConstraint.constant = 1
self.saberImageWidthConstraint.constant = 1
self.mainView.layoutIfNeeded()
self.viewDidLayoutSubviews()
}, completion: nil)
lightsaberModel.turnSaberOffAudio.play()
lightsaberModel.isSaberOn = false
}
}
Это модель с необходимой информацией.
class Model {
var turnSaberOnAudio: AVAudioPlayer = AVAudioPlayer()
var turnSaberOffAudio: AVAudioPlayer = AVAudioPlayer()
var whichLightsaber = String()
var isSaberOn = Bool()
func turnSaberOn() {
let turnSaberOnPath = Bundle.main.path(forResource: "SaberOn", ofType: "wav")
do {
turnSaberOnAudio = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: turnSaberOnPath!))
}
catch {
print(error)
}
}
func turnSaberOff() {
let turnSaberOffPath = Bundle.main.path(forResource: "SaberOff", ofType: "mp3")
do {
turnSaberOffAudio = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: turnSaberOffPath!))
}
catch {
print(error)
}
}
}