如何解决未触发 audioPlayerDidFinishPlaying
每个谷歌都有类似的 OP,但我没有通过关注它们来解决我的问题。看来我已经关闭了,但仍然无法弄清楚哪里出了问题,感谢这里的任何提示。
我的音频播放器作为单例模式放在一个单独的文件中
class AudioPlayer {
// Singleton to keep audio continue to play when switching viewControllers
static let shared = AudioPlayer()
var player: AVAudioPlayer?
private init() {}
func play(url: URL) {
do {
player = try AVAudioPlayer(contentsOf: url)
guard let player = player else { return }
player.prepareToPlay()
player.play()
} catch {
print(error)
}
}
}
然后在 PlayerViewController 中作为播放场景。我放了 player.delegate = self
。
并将委托方法放在下面。我调试并发现 audioPlayerDidFinishPlaying
没有被调用。
class PlayerViewController: UIViewController,AVAudioPlayerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
AudioPlayer.shared.player?.delegate = self
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,successfully flag: Bool) {
if flag {
print("EAT")
goNextTrack()
} else {
fatalError("the audio doesn't finished playing successfully.")
}
}
}
解决方法
在你调用 play
之前可能是这个
AudioPlayer.shared.player?.delegate = self // here player is nil and delegate won't work
AudioPlayer.shared.play(url:////)
与
不同AudioPlayer.shared.play(url:////)
AudioPlayer.shared.player?.delegate = self // here player has a value and delegate will work
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。