0
votes

I am running into the issue of my viewcontrollers not showing up even though the function calling the viewcontrollers seem to be running. The error I receive in the console is:

Warning: Attempt to present on whose view is not in the window hierarchy!

I have tried the suggestions on the "Attempt to present UIViewController on UIViewController whose view is not in the window hierarchy" thread without any progress. I am running everything programmatically.

func handleNewPage(){
    print("this code works")
    let uid = Auth.auth().currentUser?.uid

    ref = Database.database().reference()

    let usersReference = ref.child("patient").child((uid)!)

    if usersReference.child("Doctor Code") != nil {
        func presentNewPage(){
            let firstPage = LandingPage()
            let navCon = UINavigationController(rootViewController: firstPage)
            present(navCon, animated: true, completion: nil)

        }
        presentNewPage()
        print("PRINT")
    } else{
        let newPage = PresentViewController() // doctor reg page
        let navController = UINavigationController(rootViewController: newPage)
        present(navController, animated: true, completion: nil)
    }
}

The function is called and the print statements come out valid. Yet, the viewcontrollers will not appear.

1
what calls this function and do you present any controller before this function?zombie

1 Answers

0
votes

You have to create presentNewPage() function outside of your if ???

if usersReference.child("Doctor Code") != nil {
        func presentNewPage(){
            let firstPage = LandingPage()
            let navCon = UINavigationController(rootViewController: firstPage)
            present(navCon, animated: true, completion: nil)

        }
    presentNewPage()
    print("PRINT")
} else{
    let newPage = PresentViewController() // doctor reg page
    let navController = UINavigationController(rootViewController: newPage)
    present(navController, animated: true, completion: nil)
}

change it like this

func presentNewPage(){
            let firstPage = LandingPage()
            let navCon = UINavigationController(rootViewController: firstPage)
            present(navCon, animated: true, completion: nil)

        }

func handleNewPage(){
    print("this code works")
    let uid = Auth.auth().currentUser?.uid

ref = Database.database().reference()

let usersReference = ref.child("patient").child((uid)!)

if usersReference.child("Doctor Code") != nil {

    presentNewPage()
    print("PRINT")
} else{
    let newPage = PresentViewController() // doctor reg page
    let navController = UINavigationController(rootViewController: newPage)
    present(navController, animated: true, completion: nil)
}
}