В новых версиях iOS массивы AVAudioPlayer получают ошибку плохого доступа, но почему - PullRequest
0 голосов
/ 07 ноября 2019

Я использовал следующую функцию, чтобы подготовить несколько аудиоплееров.

Но при запуске кода на новых версиях iOS я получаю Поток 1: EXC_BAD_ACCESS (код = 1, адрес= 0x48) из строки player [i] = player

Все еще работает на старых версиях iOS без проблем.

func loadMusicToAPlayer(i: Int, name: String){
    let s = Bundle.main.path(forResource: name, ofType:nil)!
    let url = URL(fileURLWithPath: s )
    do {
        let player = try AVAudioPlayer(contentsOf: url)
        players[i] = player
        players[i].prepareToPlay()
        players[i].isMeteringEnabled = true
    } catch {
        print("couldn't load music file :( ")
    }
 }

1 Ответ

0 голосов
/ 07 ноября 2019

Я создавал массив, подобный этому, прежде чем использовать вышеописанную функцию. Я делал это так

for k in 0..< audioList.count {
    players.append(AVAudioPlayer())
}

, потому что иногда я менял название аудио плеера. Чтобы сделать это легко, у меня была отдельная функция загрузки звука.

Теперь я создаю массив проигрывателей, как этот. И изменил название аудио в исправленной версии рассматриваемой функции.

func loadAudio(name: [String]){

    for k in 0..< name.count {
        let s = Bundle.main.path(forResource: name[k], ofType:nil)!
        let url = URL(fileURLWithPath: s )

        do {
            let player = try AVAudioPlayer(contentsOf: url)
            players.append(player)
        } catch { print("could not load audio file"}
    }
}
...