Поскольку вы не используете UINavigationController, свойство navigationController вашего UIViewController останется нулевым.С точки зрения компиляции проблем нет, поскольку свойство существует, но компилятор не знает, что свойство останется нулевым, поэтому предупреждения / ошибки не отображаются.
Отправка сообщения объекту nil разрешена вObjective-C, следовательно, код не падает и ничего не делает при запуске.
Если вы хотите, чтобы ваш код работал и работал, вам нужно поместить корневой UIViewController в UINavigationController.Как только UIViewController отображается в UINavigationController, свойство будет автоматически установлено в UINavigationController.
Edit: Вы можете использовать что-то подобное, вместо того, чтобы показывать someController, «инкапсулировать» егоUINavigationController и показать этот контроллер.
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:someController];