別の(ビューベースのテンプレート)プロジェクトにまとめたやや複雑なビューがあります(View ControllerはMainWindow.xibではオレンジ色のアイコンで表されていました)。これで、ナビゲーションコントローラーによって管理される別のプロジェクトに移動することにしました。これは、UINavigationControllerのかなり単純なpushViewController:animated:メソッドから呼び出されます。
MyViewControllerには対応するnibファイルがあります(おそらく私の混乱の一部は、クラスとnibの名前がほぼ同じで、接尾辞.m、.h、および.xibのみが異なることです)。これが最初のプロジェクトでの起動時の最初のビューである場合、インスタンス化されたときにawakeFromNibとinitWithCoderの両方が呼び出されます。現在、viewDidLoadのみが呼び出されているようです。
何が/なぜそんな違いがあるのか迷ってしまいました!?SOで関連する他のスレッドをいくつか見つけましたが、それでも次のような答えで頭を 悩ませています。 「コントローラー自体がペン先からアーカイブ解除されるとawakeFromNibが呼び出されます。ビューが作成/アーカイブ解除されると、viewDidLoadが呼び出されます。これコントローラのビューが別のペン先ファイルに保存されている場合、区別は特に重要です。」
区別は、正確には、ViewまたはViewControllerのアーカイブが解除されているものに依存しているようです。したがって、ViewControllerがインスタンス化されてプッシュされている場合、viewDidLoadが呼び出されることだけを期待する必要がありますか?一方、ViewControllerにIBOutlet(およびそれを表すオブジェクトVCオブジェクトがNibにドラッグされている)がある場合、initWithCoderとawakeFromNibの両方が呼び出されることを期待できますか?
誰かが私をまっすぐにするのを手伝ってくれませんか?非常に特定の状況でさまざまなメソッドが任意に呼び出された場合、これらのビュー/コントローラーを再利用することはより困難になるようです...または、確かにそうであるように、これがまさに、非常に特定の状況で呼び出される理由です..iさまざまな方法のそれぞれの間の描写をまだ完全には理解していません。
誰かが私をまっすぐにするのを手伝ってくれますか?