Ios 如何修复线程1:EXC\u BAD\u访问(代码=1,地址=0x58)xcode

Ios 如何修复线程1:EXC\u BAD\u访问(代码=1,地址=0x58)xcode,ios,swift,avaudioplayer,Ios,Swift,Avaudioplayer,我试图用按钮播放一些声音文件,但按下按钮会在第1行出现以下错误线程:EXC_BAD_ACCESS(code=1,address=0x58) 我已经寻找了可能的解决方案,但我找不到与该错误相关的任何东西,我的代码的功能在打印之前运行良好,这是我的完整代码 import UIKit import AVFoundation class ViewController: UIViewController { var track: String? = nil var audioPlaye

我试图用按钮播放一些声音文件,但按下按钮会在第1行出现以下错误线程:EXC_BAD_ACCESS(code=1,address=0x58)

我已经寻找了可能的解决方案,但我找不到与该错误相关的任何东西,我的代码的功能在打印之前运行良好,这是我的完整代码

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var track: String? = nil
    var audioPlayer = AVAudioPlayer()

    @IBAction func heavyButton(_ sender: Any) {
        track = "H"
        print("heavy machine gun \(track!)")
        reproducirAudio(audio: track!)
        audioPlayer.play()
    }

    func reproducirAudio(audio: String) {
        do {
            print("entro a la funcion de reproducir")
            audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: audio, ofType: "mp3")!))
            audioPlayer.prepareToPlay()
        } catch {
            print(error)
        }
    }
}

我找到了一个解决方案,这是针对iOS13的

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var track: String? = nil
    var audioPlayer: AVAudioPlayer?

@IBAction func heavyButton(_ sender: Any) {
    track = "H"
    print("heavy machine gun \(track!)")
    reproducirAudio(audio: track!)
}

func reproducirAudio(audio: String) {
    let path = Bundle.main.path(forResource: "\(audio).mp3", ofType:nil)!
    let url = URL(fileURLWithPath: path)

    do {
       audioPlayer = try AVAudioPlayer(contentsOf: url)
       audioPlayer?.play()
    } catch {
        // couldn't load file :(
      }
}

你确定
reproductiraudio
能够构建
AVAudioPlayer
实例吗?你说的是
Bundle.main.path(forResource:audio,of type:“mp3”)。这意味着:“如果你找不到文件,请崩溃我的程序。”这就是你要求的,这就是正在发生的事情。请注意,发生这种情况时,您不会捕获错误;这是一个例外,不是一个错误。两个潜在的错误:如果
URL.init(fileURLWithPath:Bundle.main.path(forResource:audio,of type:“mp3”)
为零,您将崩溃。但iOS 13中还有一个新行为:不做
var audioPlayer=AVAudioPlayer()
。doc.Cf.等中不再有“无参数的init”。
import UIKit
import AVFoundation

class ViewController: UIViewController {

    var track: String? = nil
    var audioPlayer: AVAudioPlayer?

@IBAction func heavyButton(_ sender: Any) {
    track = "H"
    print("heavy machine gun \(track!)")
    reproducirAudio(audio: track!)
}

func reproducirAudio(audio: String) {
    let path = Bundle.main.path(forResource: "\(audio).mp3", ofType:nil)!
    let url = URL(fileURLWithPath: path)

    do {
       audioPlayer = try AVAudioPlayer(contentsOf: url)
       audioPlayer?.play()
    } catch {
        // couldn't load file :(
      }
}