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

Posted

技术标签:

【中文标题】线程 1:EXC_BAD_ACCESS(代码=1,地址=0x48)【英文标题】:Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) 【发布时间】:2019-03-12 14:19:21 【问题描述】:

我在 XCODE 上使用 swift。我遇到了这个问题,如果我想点击我的按钮来播放我的声音。它会崩溃。我有视图控制器。第一个视图控制器连接到一个情节提要。那个故事板有一个按钮播放声音。当我运行它时,声音会播放。当它去第二个故事板播放声音时它崩溃了

[2张图片是我用来播放音频的代码。我在第一个视图控制器上粘贴了相同的代码。] 这是第二个视图控制器上的内容。当我按下第二个故事板上的按钮时,我得到 Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) 但在我按下的第一个按钮上没有出现此错误。

当我运行模拟器并到达第二个视图控制器时会发生这种情况

class Level1ViewController: UIViewController, AVAudioPlayerDelegate 

    var player: AVAudioPlayer = AVAudioPlayer()
    var correctPlayer: AVAudioPlayer = AVAudioPlayer()
    var wrongPlayer: AVAudioPlayer = AVAudioPlayer()




    @IBAction func correctAnswer(_ sender: Any) 
        correctPlayer.play()
    

    @IBAction func playOne(_ sender: Any) 
        player.play()
    
    @IBOutlet weak var option2: UIButton! // wrong answer

    @IBAction func wrongAnswer1LV(_ sender: Any) 
    


    @IBOutlet weak var option1: UIButton!

    override func viewDidLoad() 
        super.viewDidLoad()


        //View Controller 1 - Working

        do 
            let audioPlayer = Bundle.main.path (forResource: "bark", ofType: "wav")

            try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer!)as URL)
        

        catch 
            //ERROR!
        

        do 
            let audioPlayer2 = Bundle.main.path (forResource: "Ding-Sound-Effect_qZC5gtOw3DU", ofType: "mp3")

            try correctPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer2!)as URL)
        

        catch 
            //ERROR!
        

View Controller 2 - 不工作(报错)

class Level2LevelViewController: UIViewController, AVAudioPlayerDelegate 

    var player: AVAudioPlayer = AVAudioPlayer()
    var correctPlayer: AVAudioPlayer = AVAudioPlayer()
    var wrongPlayer: AVAudioPlayer = AVAudioPlayer()

    @IBAction func levelTwoPLay(_ sender: Any) 
        correctPlayer.play()  **** THREAD 1: EXC_BAD_ACESS****
    



    override func viewDidLoad() 
        super.viewDidLoad()


        do 
            let audioPlayerII = Bundle.main.path (forResource: "Door Open and Close Slam Sound Effects", ofType:"mp3")

            try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayerII!)as URL)
        

        catch 
            //ERROR!!
        

    leveltwoOp1.backgroundColor = UIColor.black
    leveltwoOp2.backgroundColor = UIColor.black
    leveltwoOpTh.backgroundColor = UIColor.black
    leveltwoOp4.backgroundColor = UIColor.black

【问题讨论】:

欢迎来到 Stack Overflow。请使用tour 并查看How to Ask。 请将代码发布为文本而不是图像(您可以通过评论轻松指出错误) ㅠㅠ 네, 감사합니다。是的,谢谢。我现在就为你做这个 问题在于,在第二个视图控制器中,您从未将correctPlayer 设置为真正的玩家。 【参考方案1】:

您正在 View Controller 1 中创建一个 correctPlayer 对象,并使用以下命令对其进行初始化:

try correctPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer2!)as URL)

没关系....但是在 View Controller 2 中,您有:

var correctPlayer: AVAudioPlayer = AVAudioPlayer()

创建一个 new 实例 correctPlayer 仅在 View Controller 2 的范围内,然后您调用:

correctPlayer.play()

没有初始化它。

在 View Controller 2 内部你需要再次调用:

    do 
        let audioPlayer2 = Bundle.main.path (forResource: "Ding-Sound-Effect_qZC5gtOw3DU", ofType: "mp3")

        try correctPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer2!)as URL)
    

    catch 
        //ERROR!
    

之后你应该可以播放那个声音了。

【讨论】:

【参考方案2】:

第一个视图控制器有这样的代码:

let audioPlayer2 = Bundle.main.path (forResource: "Ding-Sound-Effect_qZC5gtOw3DU", ofType: "mp3")
try correctPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer2!)as URL)

但第二个视图控制器没有该代码。所以它的correctPlayer 坏了。

【讨论】:

以上是关于线程 1:EXC_BAD_ACCESS(代码=1,地址=0x48)的主要内容,如果未能解决你的问题,请参考以下文章

崩溃:“线程 1:EXC_BAD_ACCESS”?

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

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

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

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

迷宫构造器问题 [线程 1:EXC_BAD_ACCESS(代码=1,地址=0x8)]