【发布时间】:2019-10-04 10:07:52
【问题描述】:
我有一个应用程序被人们用来接收订单,它需要发出持续的声音,直到工作人员注意到它。它工作了两个月,然后就开始崩溃了。无论出于何种原因,它在 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()
查看DidLoad,因为我认为可能无法多次调用该代码,但它没有帮助。
具体来说,编译器在崩溃时会高亮显示这一行:
self.alertSoundEffect = try AVAudioPlayer(contentsOf: url)
我尝试使用 try AVAudioPlayer,它以 Data 对象作为参数或包含要播放的音频文件的类型,但这并没有改变任何东西。
当我尝试 AVAudioPlayer 的委托并像这样声明它时:
self.alertSoundEffect.delegate = self
就在我在 Xcode 上面分享的第一行代码之前,它会在可靠崩溃时突出显示该行。
我还应该尝试什么?
【问题讨论】:
-
请显示崩溃日志。
标签: ios swift avfoundation