私は別の(ビューベースのテンプレート)プロジェクトにまとめたやや複雑なビューを持っています(View ControllerはMainWindow.xibのオレンジ色のアイコンで表されていました)。私はそれをナビゲーションコントローラによって管理される別のプロジェクトに移すことに決めたのは今のところ十分です。これは、UINavigationControllerのかなり簡単なpushViewController:animated:メソッドから呼び出されます。NavControllerでviewControllerを移動しましたが、awakeFromNibとinitWithCoderは起動しません。
MyViewControllerは、対応するnibファイルをを(おそらく私の混乱のいくつかは、ほぼ同じよう.M、.H、& .xibが異なっているだけ接尾辞で命名されたクラス&ペン先がある)があります。これが最初のプロジェクトでの起動時の最初のビューだったとき、awakeFromNibとinitWithCoderはインスタンス化されたときに呼び出されます。今すぐにのviewDidLoadが呼ばれるようです。
私は何か/なぜそのような違いがあるのか混乱していますか?私はS.O.にいくつかのスレッドを見つけました。関連しているが、彼らはまだのような答えを私の頭を悩ま私を残していること:違いは何に依存するように思わ"awakeFromNib is called when the controller itself is unarchived from a nib. viewDidLoad is called when the view is created/unarchived. This distinction is especially important when the controller's view is stored in a separate nib file."
、exacty、ビューまたは のViewControllerアーカイブされていないことです。したがって、ViewControllerがインスタンス化され、プッシュされている場合、私はviewDidLoadが呼び出されることを期待する必要がありますか?一方、私のViewControllerがIBOutlet(およびそれを表すオブジェクトVCオブジェクトを持っていて、それが私のNibにドラッグされている)なら、私はinitWithCoderとawakeFromNibの両方が呼ばれることを期待できますか?
誰かが私を真っ直ぐにしてくれますか?非常に特殊な状況でさまざまなメソッドが任意に呼び出された場合や、確かにそうであるように、これは正確になぜという非常に特殊な状況で呼び出された場合に、これらのビュー/コントローラを再利用するのが難しいようです。 .iはまだいろいろな方法のそれぞれの間の描写を完全に理解していません。
私はまっすぐに気をつけてください。
これは実際に呼び出されています:MyViewController * myViewController = [[MyViewController alloc] initWithNibName:@ "MyViewController" bundle:nil];あなたが言うことは意味をなさないが...それでも私の場合には当てはまるのだろうか? – Meltemi
はい、まったく同じです。上記のコードの最初の行のコメントに注意してください。 initWithNibName:bundle:この場合はinitと同じです。 –
確かに...私は右にスクロールしなかったことを指摘してくれてありがとう.. – Meltemi