//自前コンテナ(self)にchildViewControllerを追加 [self addChildViewController:childViewController]; //その後didMoveToParentViewControllerを実行しなければいけない [childViewController didMoveToParentViewController:self]; この追加(add)したあとになぜ完了(didMove)を明示的に知らせないといけないのか謎という感覚。また、これがなくてもこちらの想定通り動くのでずっと疑問だった。 結論としては 自前コンテナでaddChildViewController:を実行した後は、やはり必ずdidMoveToParentViewController:を呼ぶ。これはUIViewController自身が他のコンテナに追加(もしくは削除)