2017-01-23 6 views
2

前の画面で選択したボタンに基づいて異なる情報を保持するビュー用の標準コンセントを作成しました。IBOutlet is 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 

私は私が考えるか、インターネット上で読むことができるすべてのものを試してみました:

  • を除去し、接続を置き換え

  • つのポストのような派生データフォルダが

  • viewDidAppear

    にそれを移動ロードするために、それを強制的にself.viewへの参照を作成し
  • を示唆した削除されました
  • viewWillAppear

  • は、私は答えはかなりシンプルで、私はちょうどそれを完全に行方不明だと、この時点で確信しています(それが現在
    が呼ばれている場所である)viewDidLoad

それを移動しました。コンセントがnilに設定されている場合、これを試して見るに

+0

あなたはバックトレースを表示していただけますか?正確にどのラインがクラッシュしていますか? –

+1

私はあなたに簡単な質問をして申し訳ありません:あなたはその行にクラッシュしているのですか?あなたはブレークポイントを入れて、それが本当にクラッシュラインかどうかを確認するために段階的に進めていますか? –

+0

ある時点でスーパービューからビューを削除していますか? – Sulthan

答えて

1

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

あなたはビューがロードされたとき、それは初期値に設定されるはずです。 nilに設定された場合は、printにブレークポイントを設定すると、バックトレースからその場所を確認できます。

+1

それを追加して、バックトレース(もう一度)をチェックして、私はついに簡単で愚かなエラーを発見しました。私は以前のプロジェクトを修正していて、ビューがロードされる前にセグからビューを参照していた関数への呼び出しを逃していました。今はとても愚かな気がします。 – Danickar

0

ビューは遅延初期化されています。場合は事前にアクセスviewにしようと、ビューのライフサイクルにおけるviewDidLoad()前にコードの影響を受けた行を呼び出している:私たちは何が起こっているのより良いアイデアを得ることができるように

if detail.description == "About" { 
    _ = self.view 
    labelView.backgroundColor = UIColor.red 
} 
関連する問題