기존에 구현한 회원가입 절차를 Navigation Controller
를 이용해 재구현하였다.
위 구현과정에서 많은 삽질이 있었다...
정답은 SceneDelegate.swift
내에 있는 didFinishLaunchingWithOptions
였다.
iOS13 이전의 버전은 기존과 같이 AppDelegate
에 있는 didFinishLaunching
에서 아래와 같이 처리해주면 된다.
/ // AppDelegate.swift //
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch.
if #available(iOS 13, *) {
print("set in SceneDelegate") }
else {
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = RootTabBarViewController()
self.window = window window.makeKeyAndVisible()
}
return true
}
처음 시도하다보니 위 내용이 맞는줄 알고 AppDelegate
만 수정하고 왜 안되는지 몰라서 계속하여 삽질을 했다.
결론적으로 NavigationController
에서 nil
값이 확인되었으며 이를 해결하기 위한 방법을 알아봤다.
알아보니 iOS13 이후의 버전에서는 새롭게 추가되었다는 SceneDelegate
에서 이를 관리하게 되었다.
따라서, 아래와 같이 해결하였다.
window = UIWindow(frame: UIScreen.main.bounds)
if let window = window {
let mainVC = MainViewController()
navigationController = UINavigationController(rootViewController: mainVC)
window.rootViewController = navigationController
// 루트 뷰 컨트롤러를 네비게이션 컨트롤러로 지정
window.makeKeyAndVisible()
}
return true
didFinishLaunchingWithOptions
내에 위 코드를 작성하여 네비게이션 컨트롤러를 지정해주고 rootViewController
를 직접 명시해주어야한다.
'iOS' 카테고리의 다른 글
[iOS] REST API, RESTful (0) | 2020.05.16 |
---|---|
[iOS] MVC, MVVM, MVP (0) | 2020.05.16 |
[iOS] App LifeCycle (0) | 2020.05.15 |
[iOS] SnapKit (0) | 2020.05.13 |
[iOS] ViewController _ Lifecycle (0) | 2020.05.07 |