Если вы не переопределили initWithNibName: bundle: в ViewController2, чтобы сделать что-то действительно неудачное, очень мало шансов, что то, что вы говорите, может быть правдой.
Если вы измените свой код с помощью следующего утверждения,утверждение действительно сработало?
UINavigationController* navigationController = self.navigationController;
ViewController2 *childView = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
NSAssert(navigationController == self.navigationController, @"I was removed from the navigation controller!");
[self.navigationController pushViewController:childView animated:YES];