Swift 1.1 と Xcode 6.2 を使用します。
単一のカスタムサブクラスを含むUIStoryboardがあります。UIViewController
その上に、そのコントローラーから@IBOutlet
UIView
UIView
サブクラスストーリーボード上にあります。また、そのビューのサブビューにも同様のアウトレットがあります。図 A を参照してください。
しかし、実行時には、これらのプロパティは nil になります (図 B)。Interface Builder でアウトレットを接続したことを確認したにもかかわらずです。
考え:
- サブクラスのサブクラスを使用しているため、初期化で何かがおかしくなる可能性はありますか?初期化子をオーバーライドしていません
awakeFromNib:
何らかの理由で呼び出されない- サブビュー上のサブビューに接続できない可能性があります
私が試したこと:
@IBOutlet
およびストーリーボード項目タイプを正確に一致させる( の代わりにUIView
)- プロパティとアウトレットを削除して再度追加しました
図A*
図B
* の隠されたコードは次Figure A
のとおりです:
@IBOutlet private var annotationOptionsView: UIView!
@IBOutlet private var arrivingLeavingSwitch: UISegmentedControl!
ありがとう。
ベストアンサー1
通常、これはビュー コントローラがビュー階層をまだ読み込んでいないために発生します。ビュー コントローラは、何かがメッセージを送信したときにのみビュー階層を読み込みますview
。システムは、ビュー階層を実際に画面に表示するとき、つまり や などがprepareForSegue:sender:
返さviewWillAppear:
れた後に、これを実行します。
VC はまだビュー階層をロードしていないため、アウトレットはまだ nil です。
次のように記述することで、VC にビュー階層を強制的にロードさせることができます_ = self.view
。