[iOS] Coordinator이 deinit 되고 있었다 🥲

Charlie·2022년 10월 4일
0
post-custom-banner

문제

분명 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에 넣는거를 잊지말자 🤪

profile
Hello
post-custom-banner

0개의 댓글