분명 delegate으로 잘 이어주고 VC에서 버튼을 눌렀을 때 delegate으로 설정 된 coordinator의 메소드를 잘 호출해줬는데 실행이 안됐다.
coordinator를 print해보니 nil이 자꾸 찍히는데.. 분명 설정 해줬었는데?
coordinator의 deinit에서 🔥를 찍어보니 활활 타오르고 있었다.
근데 왜 deinit되지???
결국 SceneDelegate에서 문제를 찾을 수 있었다.
기존에 다음과 같이 willConnectTo 메소드 안에서 코디네이터 인스턴스를 생성해주었었다
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController()
self.window?.rootViewController = navigationController
let appCoordinator = AppCoordinator(navigationController: navigationController)
appCoordinator.start()
window?.makeKeyAndVisible()
}
}
결국 인스턴스를 메소드 밖에서 생성해주면 되는 문제
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var coordinator: Coordinator?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController()
self.window?.rootViewController = navigationController
coordinator = AppCoordinator(navigationController: navigationController)
coordinator?.start()
window?.makeKeyAndVisible()
}
}
같은 의미에서 childCoordinators 프로퍼티를 parent에 넣는거를 잊지말자 🤪