在iOS13.1上播放音频时,应用崩溃

Ter*_*y B 16 avfoundation swift ios13

我正在构建一个应用程序,该应用程序使用URL从主捆绑包中运行声音文件。当我在iOS 13上进行测试时,一切都很好。但是,随着新的13.1更新,我在代码行中遇到了错误

backgroundMusicPlayer =试试AVAudioPlayer(contentsOf:URL(fileURLWithPath:sound!))

说的是:

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

这是我在自定义类中使用的代码,该类在应用启动时运行背景音乐:

import Foundation
import AVFoundation

var backgroundMusicPlayer = AVAudioPlayer()

func playBackgroundMusic(filename: String){
let  sound = Bundle.main.path(forResource: filename, ofType: "m4a")

do{
    try     
AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: AVAudioSession.Mode.default, options: [AVAudioSession.CategoryOptions.mixWithOthers])
    backgroundMusicPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))

}catch{
    print (error)
}
backgroundMusicPlayer.numberOfLoops = -1
backgroundMusicPlayer.prepareToPlay()
backgroundMusicPlayer.play()
}
Run Code Online (Sandbox Code Playgroud)

所有这些都可以在iOS13上的模拟器中正常运行,但在运行13.1的设备上崩溃时,URL似乎是问题所在,但我不确定为什么。在其他屏幕上,按钮正在触发捆绑中的音频文件时,也会发生相同的行为。

小智 23

更改此:

var backgroundMusicPlayer = AVAudioPlayer()
Run Code Online (Sandbox Code Playgroud)

对此:

var backgroundMusicPlayer : AVAudioPlayer!
Run Code Online (Sandbox Code Playgroud)


oma*_*oft 7

AVAudioPlayer 没有初始化,因此应该将其删除。

快速解决方案

如果您像这样初始化 AVAudioPlayer:

var musicPlayer: AVAudioPlayer = AVAudioPlayer() 
Run Code Online (Sandbox Code Playgroud)

或者

musicPlayer = AVAudioPlayer() 
Run Code Online (Sandbox Code Playgroud)

在任何方法中然后删除它并声明如下:

var musicPlayer: AVAudioPlayer!
Run Code Online (Sandbox Code Playgroud)

目标 C 的解决方案

如果你初始化像

AVAudioPlayer *musicPlayer = [[AVAudioPlayer alloc] init];
Run Code Online (Sandbox Code Playgroud)

删除 [[AVAudioPlayer alloc] init] 的 init 部分 看起来像

AVAudioPlayer *musicPlayer = [AVAudioPlayer alloc];
Run Code Online (Sandbox Code Playgroud)

编辑:如果在此之后,您的应用程序在该行暂停,就像您在那里设置断点一样(但您没有),但是在您单击播放/运行后应用程序运行没有问题,您不必担心,因为它是一些 c 级别不影响应用程序的问题。您可以在此线程中阅读更多 因此解决方案是编辑所有异常的断点,将异常类型从“全部”更改为“Objective-C异常”

  1. 转到 Xcode 中的 Breakpoint 导航器。
  2. 按住 Control 键单击“所有例外”行。
  3. 选择“编辑断点...”选项。
  4. 将异常从 All 更改为 Objective-C。

在此处输入图片说明