2016-10-05 37 views
2

所以我有一個單身人士班,我已經實施了我的模塊的委託。然而,當這個代理方法在這個單例中被執行時,我調用另一個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) { 

    } 
} 

關於爲什麼會發生這種情況的任何想法?

回答

2

它很難理解正在發生什麼。但是你正在繼承一個Jukebox類。然後使這個子類成爲Jukebox本身的代表。然後我還注意到您正在設置一個Jukebox屬性,該屬性似乎是可選的,但不是。

例如。爲什麼在play()功能是自動存儲塔。使用兩次,但最後一行是自動點唱機?自動存儲塔是可選的嗎?或者隱含地解開?如果是這樣的話,爲什麼你使用它解包兩次,然後可以選擇第三次。

你有沒有試過不讓這個單身人士成爲自動存儲塔的一個子類。相反,只要使其符合JukeBoxDelegate協議並查看是否可以實現相同的目標?

+0

我剛剛完成了這一切,一切都一樣。它可以工作,但是當我的方法被調用時,所有變量都是空的:( – ctabuyo

+0

哪個方法被調用,哪些變量是空的?它們是否都是超類的屬性? –

+0

我調用方法continuePlaying(),它是VC的一種方法,空變量是VC的屬性我可以嘗試使用NSNotifications代替 – ctabuyo