Насколько я понимаю, VC3 будет в иерархии представлений VC2, а не навигационный контроллер. Чтобы быть добавленным в иерархию представлений навигационного контроллера, вам нужно вставить на него VC3.
viewDidLoad следует вызывать только один раз, если сам файл пера не выгружен из памяти из-за нехватки памяти. В документации говорится, что viewWillAppear и viewDidAppear должны вызываться на VC3, поэтому я не знаю, почему это не так.
Обновление
Я только что проверил, и VC3 вызвал -(void)viewDidAppear:(BOOL)animated
. Убедитесь, что подпись на селекторе правильная