按下按钮时,Thread1:EXC_BAD_ACCESS(代码= 1,地址= 0X48)

时间:2016-10-30 06:11:52

标签: ios swift xcode

var buttonTapPlayer = AVAudioPlayer()


override func viewDidLoad() {
        super.viewDidLoad()

    DispatchQueue.global(qos: .background).async {
        do{
            let correctSoundUrl: URL = URL(fileURLWithPath: Bundle.main.path(forResource: "buttonTap", ofType: "wav")!)
            self.buttonTapPlayer = try AVAudioPlayer(contentsOf: correctSoundUrl)
            self.buttonTapPlayer.prepareToPlay()
        }
        catch{}
    }
}


@IBAction func buttonPressed(_ sender: UIButton) {

      self.buttonTapPlayer.play()
        performSegue(withIdentifier: "showDetail", sender: sender)

}

我在swift项目中有上面的代码。我的项目第一次在self.buttonTapPlayer.play()模拟器中运行项目时崩溃了 出现以下错误:

  

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0X48)

然而,当我重新运行它时,一切都很好。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你无法做到。您已在后台线程中构建了buttonTapPlayer,并尝试从主线程(到IBAction方法)调用它。编译器崩溃到play()因为你的播放器还没有准备好。

为避免这种情况,您可以在内部构建播放器:

DispatchQueue.main.async {
   // build your stuff to the main thread
}

或只是删除DispatchQueue.global(qos: .background).async {}