2016-03-23 11 views
0

これはちょっと変わった質問ですが、私はどの情報を提供すべきかについてもわかりません。私はビューコントローラに埋め込まれているカスタムビューコントローラとUIviewを持っています。私は接続されているビューコントローラ内のUIViewのコンセントを作成しました。すべてがうまくいくように見えますが、私のプログラムを実行すると、viewcontrollerとuiviewは接続していますが、uiviewはView Controllerのプロパティになっていません。 (それがコード内のどこか他のところで開始されているかのように)デリゲートを設定すると、ビューはnilとみなされるので、例外が発生します。だから私はコンセントの設定方法に基づいて、表示オブジェクトがcalendarviewプロパティを介したビューコントローラにリンクされなければならないなぜ視聴制御をビューコントローラに接続できないのですか?

enter image description here

:ここでは私が探しています何の絵があります。ここで

が要求されるように例外は次のようになります。

enter image description here

私はさらに、この問題をデバッグする方法上の任意のアイデアをいただければ幸いです。

+0

これは私に数回起こっています。きれいなビルドを行い、派生したデータディレクトリを削除すると、通常役に立ちます。 – Macondo2Seattle

+0

例外が追加されました。 – Chris

+0

クラッシュ関数が呼び出された場所のコードはどのように見えますか?具体的には、ViewControllerへの参照はどのように取得されますか? –

答えて

0

CalendarViewコンセントが接続され、の前にdayLabelのようになっている可能性があります。その初期化中に(私は推測している)、すぐにデリゲートを呼び出して、初期化されていないdayLabelに出会う。覚えておいてください、初期化は時間が経つにつれて起こるシーケンスです。アウトレットは瞬時に一緒に初期化されません。

実現するために重要なことは、出口は唯一の完全ではないの前に、呼び出された時viewDidLoad()で接続されることが保証されていることです。その方法とエラーを引き起こす方法にデバッグプリントを入れて、本当に最初に起こっていることを見てください。私はどこに私のお金を賭けるか知っています

また、のプロパティオブザーバをdidSet { print("Hey I got initialized!") }に置き、正確なタイミングも監視してください。これにより、スタートアップコードが強制的に何をしているかを伝えます。

私はあなたの完全なUIの流れを知りません。コードベース全体をどこかに貼り付ける必要があります。ただし、準備ができていると仮定するのではなく、

if let dayLbl = dayLabel { 
    dayLbl.text = date.stringWithDateOnly() 
} 

とするのではなく、正しいことがあります。

関連する問題