IBOutletはnilですが、ストーリーボードでは接続されています。Swift質問する

IBOutletはnilですが、ストーリーボードでは接続されています。Swift質問する

Swift 1.1 と Xcode 6.2 を使用します。

単一のカスタムサブクラスを含むUIStoryboardがあります。UIViewControllerその上に、そのコントローラーから@IBOutletUIViewUIView サブクラスストーリーボード上にあります。また、そのビューのサブビューにも同様のアウトレットがあります。図 A を参照してください。

しかし、実行時には、これらのプロパティは nil になります (図 B)。Interface Builder でアウトレットを接続したことを確認したにもかかわらずです。

考え:

  • サブクラスのサブクラスを使用しているため、初期化で何かがおかしくなる可能性はありますか?初期化子をオーバーライドしていません
  • awakeFromNib:何らかの理由で呼び出されない
  • サブビュー上のサブビューに接続できない可能性があります

私が試したこと:

  • @IBOutletおよびストーリーボード項目タイプを正確に一致させる( の代わりにUIView
  • プロパティとアウトレットを削除して再度追加しました

図A

図A*

図B

図B

* の隠されたコードは次Figure Aのとおりです:

@IBOutlet private var annotationOptionsView: UIView!
@IBOutlet private var arrivingLeavingSwitch: UISegmentedControl!

ありがとう。

ベストアンサー1

通常、これはビュー コントローラがビュー階層をまだ読み込んでいないために発生します。ビュー コントローラは、何かがメッセージを送信したときにのみビュー階層を読み込みますview。システムは、ビュー階層を実際に画面に表示するとき、つまり や などがprepareForSegue:sender:返さviewWillAppear:れた後に、これを実行します。

VC はまだビュー階層をロードしていないため、アウトレットはまだ nil です。

次のように記述することで、VC にビュー階層を強制的にロードさせることができます_ = self.view

おすすめ記事