Search code examples
iosswiftviewdidload

ViewDidLoad is always called


I just recently started to use Swift and am facing a "weird" bug with the viewDidLoad method.

My very simple app currently only has 2 viewcontrollers:

  • MainViewController, which is the Apps entry point and serves as an overview for the data which has already been created. It also provides the option to add new data, which would trigger a segue to
  • DataViewController, which provides the UI to create new data, after which it goes back to the MainViewController

Now my issue is that the viewDidLoad method of MainViewController is always called whenever the MainViewController appears (At the start of the app and every time the DataViewController disappears). Particularly, the msg "MainViewController newly created" is always printed.

Even worse, it seems that my app is "secretly" resetting. To show this I have defined the class variable "createView" in my MainViewController which is true by default, and is set to false during the viewDidLoad (the only place where this variable is called/set). However the msg "MVC newly created" is still always printed in the output after the MainViewController shows up. How can that be? Why / how is createView reset to true?

Hope this snippet is enough to find the issue. Otherwise, let me know if something is missing.

Thanks for your help!

override func viewDidLoad() 
{
    super.viewDidLoad()


    if (createView)
    {
        determineArraySize()
        createDataArray()
        print("MainViewController newly created")
        createView = false

    }
    else {print("Nothing happened")}
}

Solution

  • As @moritz mentioned in the comments, check out the way you present the DataViewController in your storyboard.

    If the view is presented modally, you should call:

    dismiss(animated: true, completion: nil)

    If the view is presented using a show seque, you should call:

    _ = navigationController?.popViewControllerAnimated(true)