Привет, ребята , к сожалению, я застрял, и после многих попыток за последние три дня я должен попросить помочь здесь.
У меня есть приложение, которое много лет находится в AppStore и работает без сбоев (последняя цель развертывания iOS 12.4). У меня есть некоторый код для воспроизведения звука в определенных событиях в приложении.
Теперь я попытался обновить свое приложение для iOS 13, и без изменения кода, связанного с этой функцией playSound, я всегда получаю это ошибка времени выполнения при тестировании на реальном устройстве . Не происходит на симуляторе .
Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x48)
ПОЖАЛУЙСТА: Прежде чем пометить этот вопрос как «дублировать» , подумайте, что это должно быть как-то связано с выпуском 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)
}
Я думаю, что это как-то не работает из-за асинхронный поток. Но так как он находится в главном потоке, я думал, что это должно работать.
СПАСИБО за любой совет!