[英]play next song when music when music is finished in iOS swift
我试图建立一个音乐应用程序。 音乐播放得很好,但是音乐播放完后就不会播放下一首歌。 我正在寻找这个解决方案。 当我尝试一些解决方案是给我错误。
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[Shironamhin.MusicPlayer playerDidFinishPlaying:]:无法识别的选择器已发送到实例0x17003d960
我正在尝试这种方式
class MusicPlayer: NSObject {
static let player = MusicPlayer()
//this is global variable
var player : AVPlayer?
var playerItem:AVPlayerItem?
func initPlayer(){
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
print("AVAudioSession is Active")
} catch let error as NSError {
print(error.localizedDescription)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
func playMusic(_ musicUrl: String?) {
if let mm = musicUrl {
var url: URL!
url = URL(string: mm)
playerItem = AVPlayerItem(url: url)
player = AVPlayer(playerItem: playerItem)
player?.volume = 1.0
player?.rate = 1.0
player?.play()
NotificationCenter.default.addObserver(self, selector: Selector(("playerDidFinishPlaying:")), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem)
}
func playerDidFinishPlaying(note: NSNotification) {
print("call")
}
}
}
另外,我如何实现这个playerDidFinishPlaying?
从Swift 3开始,您必须这样声明Selectors
: #selector(playerDidFinishPlaying(email:))
,从Swift 4开始,您必须将@objc
属性添加到函数中:
@objc func audioDidFinishPlaying(note: NSNotification) {
print("call")
}
顺便说一句, AVAudioPlayerDelegate
有一个不错的功能: optional func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool)
,使用起来可能会更容易。 :)
我同意@ user6603599,这就是我使用的。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
print("\naudioPlayerDidFinishPlaying")
}
确保为您的MusicPlayer类设置如下:
class MusicPlayer:AVAudioPlayerDelegate {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.