audioPlayerDidFinishPlaying is not triggered



每个谷歌都有类似的OP退出,但我没有通过遵循它们来解决我的问题。我似乎已经关闭了,但仍然不知道哪里出了问题,感谢这里的任何提示。

我的AudioPlayer作为Singleton模式放在一个单独的文件中

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 

最新更新