Добавляя ответ Zev (и переключаясь обратно на Objective-C), вы можете столкнуться с ситуацией, когда ваш контроллер корневого представления представляет другой VC через segue или что-то еще. Вызов предоставленногоViewController в корневом VC позаботится об этом:
[[UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController presentViewController:alertController animated:YES completion:^{}];
Это выпрямило проблему, с которой корневой VC перешел на другой VC, и вместо представления контроллера предупреждений предупреждение, подобное те, о которых сообщалось выше, были опубликованы:
Warning: Attempt to present <UIAlertController: 0x145bfa30> on <UINavigationController: 0x1458e450> whose view is not in the window hierarchy!
Я не тестировал его, но это также может быть необходимо, если ваш корневой VC является навигационным контроллером.