所以我有一个单例类,我已经实现了我的模块的委托。但是当在这个单例中执行该委托方法时,我在App的另一个类中调用一个方法,它崩溃了,因为之前在该类中设置的所有变量都是空的。
class Player: Jukebox, JukeboxDelegate {
static let sharedInstance = Player()
func setDelegate(){
jukebox = Jukebox(delegate: self)
}
func play(Link: String) {
jukebox.setIT([JukeboxItem(URL: NSURL(string: Link)!)])
jukebox.setImage(currentImage)
jukebox?.play()
}
func audioPlayerDidFinishPlaying(player: Jukebox, successfully flag: Bool) {
if pltype == PlayerType.Playlist {
MyMusicVC.continuePlaying() { () -> () in
}
}
}
func jukeboxStateDidChange(state: Jukebox) {
}
func jukeboxPlaybackProgressDidChange(jukebox: Jukebox) {
}
func jukeboxDidLoadItem(jukebox: Jukebox, item: JukeboxItem) {
}
func jukeboxDidUpdateMetadata(jukebox: Jukebox, forItem: JukeboxItem) {
}
}
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
很难理解发生了什么。但是你是一个Jukebox类的子类。然后使这个子类成为Jukebox本身的委托。然后我还注意到你正在设置一个看似可选但不是的Jukebox属性。
例如。为什么play()函数是jukebox。使用了两次,但最后一行是点唱机?点唱机是可选的吗?或隐含地解开?如果是这样的话,你为什么要用它解开两次,然后再选择第三次。
您是否尝试过不将此单例作为自动点唱机的子类。相反,只需使它符合JukeBoxDelegate协议,看看它是否实现了相同的目标?