ビューコントローラの封じ込めに関するWWDC2011セッション102で、ビューコントローラ階層をビュー階層と同期させておくことができないと、ローテーションイベントの問題が発生する可能性があると述べています。彼らは、ビューコントローラのビューを取得し、それをメインビューのサブビューとして追加し、コントローラ自体をビューコントローラ階層に追加しない場合、これらの回転イベントを取得しないことを明示的に指摘しています。そのWWDCセッションでは、アプリを「将来にわたって利用できる」ようにする場合は、ViewControllerを適切に管理することも提案されています。
実用的な観点からは、これは、あるビューから別のビューに移動するときに、実際にはビューコントローラーを移行する必要があることを意味します。最も一般的には、これはpushViewController
またはpresentViewControllerAnimated
(以前はpresentModalViewController
)を使用することを意味します。または、View Controllerの包含を使用することもできます(WWDCセッションを参照するか、UIViewControllerクラスリファレンスの包含に関する非常に簡単なコメントを参照してください)。ただし、別のView Controllerからビューを取得して、現在のビューのサブビューとして追加するだけではいけません。
ビューコントローラの封じ込めを追求する場合、少なくとも、次の方法で子ビューのコントローラを階層に追加できます。
[self addChildViewController:childController];
[childController didMoveToParentViewController:self];