I am trying to understand why a) vc2's navController property is nil, and b) why the nav controller vc stack does not have vc2.
import UIKit
let vc1 = UIViewController()
let navController1 = UINavigationController(rootViewController: vc1)
print(navController1.viewControllers) // prints vc1
print(vc1.navigationController) // prints navController1
let vc2 = UIViewController()
navController1.pushViewController(vc2, animated: true)
print(navController1.viewControllers) // prints only vc1. Hmmm
print(vc2.navigationController) // prints nil
Timing...
let vc1 = UIViewController()
let navController1 = UINavigationController(rootViewController: vc1)
print(navController1.viewControllers) // prints vc1
print(vc1.navigationController) // prints navController1
let vc2 = UIViewController()
// animated: true !!!!
navController1.pushViewController(vc2, animated: true)
// next two lines execute BEFORE the above line finishes
print(navController1.viewControllers) // prints only vc1. Hmmm
print(vc2.navigationController) // prints nil
Change animated to false:
// animated: false !!!!
navController1.pushViewController(vc2, animated: false)
and you'll see what you were expecting to see.