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

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

错误出现在这里:

self.player.play()

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

导入UIKit
导入AVFoundation

类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()}

最佳答案

您对代码执行的操作是:

  • 创建AVAudioPlayer的实例而没有任何数据
  • 尝试使用来自music.mp3文件
  • 的一些数据创建新实例
  • 播放

  • 如果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方法现在位于可选链
  • 我已将播放器的初始化移到了单独的 private 方法中,以保持代码的可读性。随时更改它,这只是一个建议。
  • 关于ios - 线程1:EXC_BAD_ACCESS(代码= 1,地址= 0X48),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46526759/

    10-14 16:58
    查看更多