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

时间:2017-10-02 13:46:43

标签: ios swift4

我是Swift的新手。我正在尝试运行此代码但出现错误:

  

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

此处出现错误:

  

self.player.play()

任何人都可以帮忙解决这个问题吗?

import UIKit
import AVFoundation

class ViewController: UIViewController {

var player = AVAudioPlayer() override func viewDidLoad() { super.viewDidLoad() do { if let audioPath = Bundle.main.path(forResource: "music", ofType: "mp3") { try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath)) } } catch { print("ERROR") } self.player.play() }

2 个答案:

答案 0 :(得分:1)

您使用代码执行的操作是:

  1. 创建AVAudioPlayer 的实例,不带任何数据
  2. 尝试使用 music.mp3 文件中的一些数据创建新实例
  3. 播放
  4. 如果audioPath不正确,则播放器未正确创建:应用程序将使用一个无效有效数据,导致播放期间崩溃。

    您的代码可以编写为播放器optional,这有助于防止崩溃:

    import UIKit
    import AVFoundation
    
    class ViewController: UIViewController {
    
        var player: AVAudioPlayer?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            player = initializePlayer()
            player?.play()
        }
    
        private func initializePlayer() -> AVAudioPlayer? {
            guard let path = Bundle.main.path(forResource: "music", ofType: "mp3") else {
                return nil
            }
    
            return try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
        }
    }
    

    对代码执行了一些更改:

    • player现在是可选:无需初始化两次。此外,如果初始化顺利,您可以毫无问题地使用它,否则您的应用程序不会崩溃。
    • play方法现在位于可选链
    • 我已经在单独的私有方法中移动了播放器的初始化,以保持代码可读。随意改变它,这只是一个建议。

答案 1 :(得分:0)

我知道了。问题是文件没有处理我的应用程序包。解决它:

  1. 点击您的项目
  2. 点击目标
  3. 选择构建阶段
  4. 展开复制捆绑资源
  5. 点击“+”并选择您的文件。
  6. 感谢Denis Hennessy