2015-04-03 98 views
0

我試圖從場景1中設置場景2中的標籤文本。我寫了下面的代碼。在場景之間傳遞數據

// original viewController (scene 1) 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let destination = segue.destinationViewController as Scene2ViewController 
      destination.scene2Label.text = "Arrived from scene 1" 
     } //scene2Label is a Label in Scene2ViewController 

這會拋出一個錯誤:在解包可選值時意外發現nil。這是指向

destination.scene2Label.text = "Arrived from scene 1" 

這怎麼可能?我認爲我將scene2Label的文本值設置爲「從場景1到達」。

在另一方面,這此代碼的工作就好了:

class ViewController: UIViewController { 
    @IBOutlet weak var scene1Label: UILabel! 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let destination = segue.destinationViewController as Scene2ViewController 
     destination.labelText = "Arrived from scene 1" 
    } 
} 

class Scene2ViewController: UIViewController { 
    @IBOutlet weak var scene2Label: UILabel! 
    var labelText : String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     scene2Label.text = labelText 
    } 
} 

爲什麼?

回答

0

您在prepareForSegue期間獲取的目標控制器:當時尚未加載其視圖。這也意味着它沒有任何子視圖的銷售網絡已經連接。

您可以確定有網點的最早是viewDidLoad。