我有一个应用程序供人们使用,它需要发出连续的声音,直到员工参加为止。它工作了两个月,然后才开始崩溃很多。无论出于何种原因,它都可以在iPad上正常运行,但不能在运行最新操作系统的iPhone上运行。
这部分代码被调用时会崩溃:
guard let path = Bundle.main.path(forResource: "alert.mp3", ofType: nil) else { return }
let url = URL(fileURLWithPath: path)
do {
self.alertSoundEffect = try AVAudioPlayer(contentsOf: url)
} catch let err {
print("err: \(err)")
}
DispatchQueue.main.async {
self.alertSoundEffect.numberOfLoops = -1
self.alertSoundEffect.prepareToPlay()
self.alertSoundEffect.play()
}
在线修复程序,以声明如下的alertSoundEffect变量:
private var alertSoundEffect : AVAudioPlayer!
根本不起作用。
我尝试移动除行外的所有内容:
self.alertSoundEffect.play()
我认为可能无法多次调用代码来查看viewDidLoad,但这无济于事。
具体来说,编译器在崩溃时会突出显示此行:
self.alertSoundEffect = try AVAudioPlayer(contentsOf: url)
我尝试使用try AVAudioPlayer,它将数据对象作为参数或包含要播放的音频文件的类型,但这并没有改变。
当我尝试AVAudioPlayer的委托并这样声明时:
self.alertSoundEffect.delegate = self
在我在Xcode上方共享的第一行代码之前,在可靠崩溃时会突出显示该行。
我还应该尝试什么?
答案 0 :(得分:0)
我想您的path
是错误的。
试试这个:
guard let path = Bundle.main.path(forResource: "alert", ofType: "mp3") else { return }
此外,如果您的音频文件很短(例如少于30秒),请尽量不要呼叫self.alertSoundEffect.prepareToPlay()
。只需立即致电self.alertSoundEffect.play()
。
自iOS 13以来,这导致我的应用程序出现错误,因为我的通知声音持续3-10秒。
答案 1 :(得分:0)
如果以任何方法初始化AVAudioPlayer像varrongMusicPlayer:AVAudioPlayer = AVAudioPlayer()或rongMusicPlayer = AVAudioPlayer(),然后将其删除,然后像varrongMusicPlayer:AVAudioPlayer一样声明。