如何修复线程 1:EXC_BAD_ACCESS (code=1, address=0x58) xcode
Posted
技术标签:
【中文标题】如何修复线程 1:EXC_BAD_ACCESS (code=1, address=0x58) xcode【英文标题】:How to fix Thread 1: EXC_BAD_ACCESS (code=1, address=0x58) xcode 【发布时间】:2019-10-20 13:17:00 【问题描述】:我正在尝试使用按钮播放一些声音文件,但按下按钮会引发此错误 Thread 1: EXC_BAD_ACCESS (code=1, address=0x58) on line
audioPlayer.play()
我已经寻找可能的解决方案,但找不到与该错误相关的任何内容,我的代码功能在打印之前运行良好,这是我的完整代码。
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)
【问题讨论】:
你确定reproducirAudio
能够构造AVAudioPlayer
实例吗?
你说的是Bundle.main.path(forResource: audio, ofType: "mp3")!
。这意味着:“如果找不到文件,请让我的程序崩溃。”这就是你所要求的,这就是正在发生的事情。请注意,当这种情况发生时,您将不会捕获错误;这是一个例外,而不是错误。
两个潜在错误:如果URL.init(fileURLWithPath: Bundle.main.path(forResource: audio, ofType: "mp3")
为nil,您将崩溃。但在 ios 13 中还有一个新行为:不要做var audioPlayer = AVAudioPlayer()
。文档中不再有“没有参数的初始化”。
参见。 ***.com/questions/58166133/…***.com/questions/58110827/…等
【参考方案1】:
我找到了解决方案,这是针对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 :(
【讨论】:
以上是关于如何修复线程 1:EXC_BAD_ACCESS (code=1, address=0x58) xcode的主要内容,如果未能解决你的问题,请参考以下文章
我该如何解决这个 EXC_BAD_ACCESS(代码=1 地址=0x0bbadbeef)