2016-10-26 22 views
0

セグを別のコントローラにセットアップしましたが、テキストビューのテキストを新しいコントローラに渡そうとしています。私はプログラムを実行すると、私はエラーを取得しておいてください。ViewControllerからデータを渡す

を、私は私が渡していた値がnilでない...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
      if segue.identifier == "getReflection" { 
       if let destinationVC = segue.destination as? ReflectionViewController { 
        destinationVC.reflectionTextBox.text = self.reflectionTextBox.text 
//Crashes on the above expression??? 
        destinationVC.delegate = self 
       } 
      } 
     } 

以下の私のセグエコードを参照してください知っている「オプションの値をアンラップしながら、予期せずnilを見つけ」どんな助けもありがとう!

答えて

0

目的のViewControllerのビューが準備時にインスタンス化されていないため、IBOutletバインディングは発生していません。この場合

destinationVC.reflectionTextBox@IBOutlet weak var reflectionTextBox: UITextView!として定義されている場合!任意アンラップがまだ結合しないreflectionTextBoxへの参照を返すようにしようとすると、クラッシュが発生します。 prepareSegueを使用して宛先ビューコントローラにデータを渡す必要がある場合、宛先ビューコントローラは、viewDidLoad関数内のこれらのパラメータを検索して、それらを任意のUIコンポーネントで使用することができます。

+0

こんにちはKevin、弱いvarの問題は理にかなっていますが、あなたはsegueの準備関数で変数を渡す方法の例を挙げることができますか? viewDIdLoadはどのようにそれらにアクセスしますか?または、おそらく受信側のコントローラーで強い変数を宣言してから、テキストボックスに値を設定することができますか? –

+0

ありがとうございます...強力な変数が機能しています...例の必要はありません –

+0

これは、ほとんどのユースケースではまさにその方法です。根本的な問題は可変参照カウントではないため、弱い場合もあります。そのIBバインディングは、ライフサイクルの後半まで初期化されません。うれしいことに助けてくれて、答えを受け入れてくれてありがとう! –

関連する問題