27

同様の質問がたくさんあることは知っていますが、これに具体的に対処するものは見つかりません。

self.navigationControllerで呼び出されたときは nullviewDidLoadであるのに、外部から呼び出されたときは正しいのはなぜviewDidLoadですか?

NSLog(@"%@",self.navigationController);これは からの私の出力viewDidLoadですNSLog(@"%@",self.navigationController);

NavApp[31524:11003] (null)
NavApp[31524:11003] <UINavigationController: 0x6e21190>

この動作には簡単な説明があるに違いないことはわかっていますが、それが何であるかについて興味があります。ありがとう!

4

1 に答える 1

78

-viewビュー コントローラーのビューは、そのコントローラーのメソッド/プロパティに最初にアクセスしたときに読み込まれます。ビューがロードされた後、viewDidLoadメソッドが呼び出されます。これはかなり簡単です。また、ビューが画面外にあるときにメモリ警告を受け取った場合、ビューを複数回ロード/アンロードできることを覚えておく必要があります。

したがってviewDidLoad、View Controller が Navigation Controller に挿入されたわけではありません。ビュー コントローラーをナビゲーション コントローラーにプッシュするプロセスでは、viewアクセスして読み込まれますが、これはプッシュ全体が完了する前に行われます。そのため、プロパティが更新さviewDidLoadれる前に呼び出されることは明らかです。navigationController

また、ビュー コントローラーをナビゲーション コントローラーにプッシュする前に、コードの他の部分がビュー コントローラーのビューにアクセスしている可能性があることも考慮する必要があります。

あなたviewDidLoadがしていることをする場所も間違っています。viewDidAppear:ビューコントローラーのビューが呼び出されたときにビュー階層の一部であることを知るために、おそらく次のようなメソッドを使用したいと思うでしょう。

于 2012-06-11T15:06:55.610 に答える