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)
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异常”
归档时间: |
|
查看次数: |
1837 次 |
最近记录: |