How To Fix Warning Attempt To Present UIAlertController On ViewController Whose View Is Not In The Window Hierarchy

I want to implement an effect that when the iOS app start, it popup an alert dialog in the screen and display some messages. But during the process, i meet an error message like below, and the alert dialog is not displayed as i want. This article will tell you how to fix this issue.

1. Error Message.

TestProject[2673:43682] Warning: Attempt to present <UIAlertController: 0x7f8ae603c000> on <TestProject.ViewController: 0x7f8ae5d097d0> whose view is not in the window hierarchy!

2. How To Fix Above Error.

The reason for this error is because i create the instance of swift UIAlertController class in the ViewController class’s viewDidLoad() method.

To fix this error, i need to override ViewController class’s viewDidAppear method and put the UIAlertController class initialization code in the viewDidAppear method like below.

ViewController.swift

//
//  ViewController.swift
//  TestProject
//
//  Created by song zhao on 8/6/19.
//  Copyright © 2019 dev2qa.com. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    var message:String = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        
        message = "Hello Swift"

        print(message)
            
    }
    
    /* Override the viewDidAppear method and display iOS swift alert popup dialog in it. */
    override func viewDidAppear(_ animated: Bool) {

        /* Below method will display a swift alert dialog window. */
        presentAlertDialog()
    }
    
    /* Below function will create an iOS swift alert dialog and display the message in it. */
    func presentAlertDialog() -> Void{

        /* Create a UIAlertController object with provided title, message and alert dialog style. */
        let alertController:UIAlertController = UIAlertController(title: "Message", message: message, preferredStyle: UIAlertController.Style.alert)

     
        /* Create a UIAlertAction object with title to implement the alert dialog OK button. */    
        let alertAction:UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:nil)
        /* Add above UIAlertAction button to the UIAlertController object. */        
        alertController.addAction(alertAction)
        

        /* Display the swift alert dialog window. */
        present(alertController, animated: true, completion: nil)
    }


}

Below is the screen when execute above app.

READ :   How To Create, Align And Wrap Label Text Programmatically In Swift iOS App

popup an alert dialog when ios swift app start

Reference

  1. How To Prompt Alert Dialog When Click A Button In Swift

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.