所以我有一个单例类,我在其中实现了模块的委托(delegate)。然而,当该委托(delegate)方法在此单例中执行时,我调用应用程序的另一个类中的方法,并且它崩溃了,因为先前在该类中设置的所有变量都是空的。
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) {
}
}
关于为什么会发生这种情况有什么想法吗?
最佳答案
很难理解发生了什么。但是您正在对 Jukebox 类进行子类化。然后使该子类成为 Jukebox 本身的委托(delegate)。然后我还注意到您正在设置一个似乎是可选的 Jukebox 属性,但实际上并非如此。
例如。为什么在 play() 函数中是点唱机。使用了两次,但最后一行是点唱机?自动点唱机是可选的吗?还是隐式地解开?如果是这样,为什么你要使用它两次,然后可选地第三次。
您是否尝试过不让这个单例成为自动点唱机的子类。相反,只需使其符合 JukeBoxDelegate 协议(protocol),看看是否可以实现相同的目标?
关于ios - 从单例类调用方法时变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39880159/