在新的 iOS 版本中,AVAudioPlayer 数组出现错误的访问错误,但为啥

Posted

技术标签:

【中文标题】在新的 iOS 版本中,AVAudioPlayer 数组出现错误的访问错误,但为啥【英文标题】:At New iOS Versions AVAudioPlayer Arrays gets Bad Access Error But Why在新的 iOS 版本中,AVAudioPlayer 数组出现错误的访问错误,但为什么 【发布时间】:2019-11-07 09:15:32 【问题描述】:

我正在使用以下函数来准备多个音频播放器。

但是当在新的 ios 版本上运行代码时,我得到 Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) 玩家[i] = 玩家

它仍然可以在旧 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 :( ")
    
 

【问题讨论】:

在您创建 player 属性的位置显示您的代码 我正在创建这样的播放器数组,var player : [AVAudioPlayer] = [], players.append(AVAudioPlayer()) , 尽可能多地循环。 AVAudioPlayer() 在 iOS13 的早期版本上崩溃。 ***.com/questions/58110827/…***.com/questions/58144735/…等 是的,我注意到如果我创建像 players.append(player) 这样的播放器,它可以工作,但我现在必须更改代码。因为我从多个地方调用函数。 【参考方案1】:

在使用上面的函数之前,我正在创建一个这样的数组。 我就是这样做的

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"
    

【讨论】:

以上是关于在新的 iOS 版本中,AVAudioPlayer 数组出现错误的访问错误,但为啥的主要内容,如果未能解决你的问题,请参考以下文章

无法在新的 Xcode 版本 13 上运行 React 本机 IOS 应用程序

无法在新的 ios8 中运行我的科尔多瓦应用程序

如何在新的 iOS 7 和 Xcode 5 上使用旧 ios 版本构建我的应用程序

无法在新的 AWS EMR 集群中获取 SparkContext

在新的 DatePicker (iOS14) 中更改字体颜色

如何在新的 Google Play 控制台中停用所有旧版本的 APK?