【问题标题】:Empty vars when calling method from singleton class从单例类调用方法时为空变量
【发布时间】:2016-10-06 01:42:44
【问题描述】:

所以我有一个单例类,我在其中实现了模块的委托。但是,当该委托方法在这个单例中执行时,我调用了 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) {

    }
}

关于为什么会发生这种情况的任何想法?

【问题讨论】:

    标签: ios swift delegation


    【解决方案1】:

    很难理解发生了什么。但是您正在继承 Jukebox 类。然后让这个子类成为 Jukebox 本身的代表。然后我还注意到您设置的 Jukebox 属性似乎是可选的,但不是。

    例如。为什么在 play() 函数中是点唱机。使用了两次,但最后一行是点唱机?。点唱机是可选的吗?还是隐式展开?如果是这样,你为什么要使用它解开两次,然后可选地第三次。

    你有没有试过不让这个单例成为点唱机的子类。而是让它符合 JukeBoxDelegate 协议,看看是否实现了相同的目标?

    【讨论】:

    • 我刚刚这样做了,一切都还是一样。它有效,但是当我的方法被调用时,所有变量都是空的。 :(
    • 哪个方法被调用,哪些变量是空的?它们都是超类的属性吗?
    • 我正在调用方法 continuePlaying() ,这是一个 VC 的方法。为空的变量是该 VC 的属性。我将尝试使用 NSNotifications。
    • 是的。在您正在谈论的代码中显示粘贴可能会有所帮助。 (与此点唱机相关的视图控制器属性和方法)
    • 我能够使用 NSNotification 调用变量来修复它。但无论如何,非常感谢您为解决我的问题所付出的时间和精力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    相关资源
    最近更新 更多