2017-01-23 29 views
2

我已創建爲將基於先前屏幕上選擇的按鈕保持不同的信息的圖標準插座。IBOutlet中是nil

@IBOutlet weak var labelView: UIView! 

這表明它是連接兩個故事板視圖和代碼本身,但是,每次我去任何參考LABELVIEW如:

if detail.description == "About" 
{ 
    labelView.backgroundColor = UIColor.red 
} 

然後應用程序崩潰出有:

fatal error: unexpectedly found nil while unwrapping an Optional value 

我已經試過所有我能想到的或在互聯網上寫着:

  • 移除和替換的連接

  • 刪除像一個支柱所得到的數據文件夾建議

  • 創建一個參考self.view迫使它加載

  • 它移到viewDidAppear

  • 將其移動到viewWillAppear

  • 它移動到viewDidLoad(這是它目前正在
    稱呼)

我相信在這一點上,答案是很簡單的,我只是完全失蹤了。

+0

能否請你告訴回溯所以我們可以得到發生了什麼更好的主意嗎?究竟是哪條線墜毀? –

+1

對不起,如果我問你一個簡單的問題:你確定你在該行的崩潰?你有沒有嘗試設置一個斷點並逐步進行,看它是否真的是崩潰線? –

+0

您是否在某個時候從其超級視圖中刪除了視圖? – Sulthan

回答

1

要看到出口被設置爲無,試試這個:

@IBOutlet weak var labelView: UIView? { 
    didSet { 
     print("labelView: \(labelView)") 
    } 
} 

你應該看到的視圖加載時將其設置爲初始值。如果再被設置爲nil,穿上print斷點,你應該能夠從那裏發生的事情回溯看。

+1

並稱,並通過回溯追蹤檢查(再次)我終於找到了簡單的和愚蠢的錯誤。我修改了一個以前的項目,並且錯過了在視圖加載之前引用了來自segue的視圖的函數調用,因此爲零。我現在感覺非常愚蠢。 – Danickar

0

視圖是懶惰的初始化。如果你調用的代碼viewDidLoad()的意見生命週期之前,受影響的線路,嘗試訪問view提前:

if detail.description == "About" { 
    _ = self.view 
    labelView.backgroundColor = UIColor.red 
}