Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UINavigationController, navigationController 접근 시 주의사항 (viewDidLoad 시점에 navigationController가 nil인 이유) 본문

iOS 응용 (swift)

[iOS - swift] UINavigationController, navigationController 접근 시 주의사항 (viewDidLoad 시점에 navigationController가 nil인 이유)

jake-kim 2024. 2. 23. 00:09

UINavigationController 접근 주의사항

  • UIViewController에서 navigationController 접근 시 viewDidLoad 시점에서는 nil임을 주의

ex) VC를 navgationViewController로 push하여 viewDidLoad시점과 viewWillAppear시점에 naviagtionController 출력

class SecondVC: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("(viewDidLoad) naviVC:", navigationController)
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("(viewWillAppear) naviVC:", navigationController)
    }
}

// (viewDidLoad) naviVC: nil
// (viewWillAppear) naviVC: Optional(<UINavigationController: 0x13f00b000>)

viewDidLoad 시점에 navigationController가 nil인 이유

  • viewDidLoad의 의미 먼저 파악하기
    • UIViewController의 view를 참조하거나 메서드를 호출할 때, view가 load되는데 이 때 viewDidLoad가 호출됨
  • 즉 viewDidLoad는 뷰 컨트롤러가 네비게이션 컨트롤러에 삽입되었다는 것을 의미하지 않기 때문에 viewDidLoad시점에는 navigationController가 nil

* 전체 코드: https://github.com/JK0369/ExNavigationController

* 참고

- https://stackoverflow.com/questions/10982567/why-is-self-navigationcontroller-null-in-viewdidload

Comments