Проблема, с которой вы сталкиваетесь, заключается в том, что анимации требуют времени, и вы вызываете второй подарок, прежде чем первый завершит презентацию и увольнение. Даже при одушевленном false эти звонки занимают некоторое время Если вы используете замыкания завершения и соединяете их вместе, появляется второе предупреждение с правильным заголовком:
let rootViewController = UIViewController()
rootViewController.view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 640.0, height: 640.0))
let navigationController = UINavigationController(rootViewController: rootViewController)
PlaygroundPage.current.liveView = navigationController
var alertController: UIAlertController! = UIAlertController(title: "Test", message: "This is a test", preferredStyle: .alert)
rootViewController.present(alertController, animated: true) {
alertController.dismiss(animated: false) {
alertController = UIAlertController(title: "Another Test", message: "This is another test", preferredStyle: .alert)
rootViewController.present(alertController, animated: true, completion: nil)
}
}
Если вы запустите исходный код из Xcode, вы увидите следующее сообщение в консоли:
Warning: Attempt to present <UIAlertController: 0x7fab67825200> on <TestProject.ViewController: 0x7fab66d0e090> while a presentation is in progress!
Это говорит о том, что первый контроллер предупреждений все еще присутствует, когда сделан вызов для представления второго.