AVAudioPlayer 在 iOS 13 上崩溃

Posted

技术标签:

【中文标题】AVAudioPlayer 在 iOS 13 上崩溃【英文标题】:AVAudioPlayer crashes on iOS 13 【发布时间】:2019-09-28 08:44:20 【问题描述】:

我用这段代码播放音频:

let url = Bundle.main.url(forResource: "0", withExtension: "mp3")!

            do 

                audioPlayer = try AVAudioPlayer(contentsOf: url)
                audioPlayer.delegate = self
                audioPlayer.prepareToPlay()
                play(sender:AnyObject.self as AnyObject)

             catch 
            

在我的 iPhone X 和 iPhone 7 Plus 上的 ios 12.4.1 上,此代码可以正常工作。但在 iOS 13 和更新版本上,我的应用程序在这条线上崩溃 audioPlayer = try AVAudioPlayer(contentsOf: url) 并出现错误 Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)。但是在我的带有 iOS 13 的模拟器 iPhone 11 Pro Max 上一切正常。为什么会发生这种情况以及如何解决?

【问题讨论】:

这个问题已经在这里解决了:***.com/questions/58110827/… 【参考方案1】:

我也遇到了这个错误,你可能正在像这样实例化你的 audioPlayer:

let audioPlayer = AVAudioPlayer ()

尝试创建一个可选的:

let audioPlayer: AVAudioPlayer?

并在 viewDidLoad() 中完成您的代码:

let path = Bundle.main.path (forResource: "0", ofType: "mp3")!
let url = URL(fileURLWithPath: path)
do 
   audioPlayer = try AVAudioPlayer(contentsOf: url)
 catch

【讨论】:

这为我消除了崩溃,但声音不起作用并且播放器似乎没有被实例化。声音对您有用还是只能解决崩溃问题? @nullforlife 在实例化您的 AV(Audio)Player 之前,添加以下行:try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default) 这为我停止了崩溃。但声音没有播放。我认为这是一个模拟器错误。当我使用低版本的模拟器 ipad 时,会出现 AVAudioPlayer 错误。【参考方案2】:

您可以像这样实例化您的音频播放器:

var audioPlayer : AVAudioPlayer!

那么请写下这段代码:

do 
    self.audioPlayer = try AVAudioPlayer(contentsOf: sound)
    self.audioPlayer.play()
   catch 

这对我有用。

【讨论】:

以上是关于AVAudioPlayer 在 iOS 13 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPN

ios 如何播放在线的音频文件

在 iOS 6.0 中找不到 AVAudioPlayer

使用 AVAudioPlayer 在 iOS 中自动平移

如何在 ios5 中播放本地方法的 AVAudioPlayer?

iOS - AVAudioPlayer 在后台不会继续播放下一首歌曲