Просмотр контроллера добавлен в приложение делегат не появляется

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let auth: UIViewController =
        storyBoard.instantiateViewController(withIdentifier: "Auth") as UIViewController

    window?.rootViewController?.present(auth, animated: true, completion: nil)

    return true
}

Я получаю ошибку...

Внимание! Попытайтесь представить, чей вид не находится в иерархии окон!

Я предполагаю, что корневой контроллер не был должным образом настроен на этом этапе жизненного цикла приложения.

Как мне это сделать? Я хочу, чтобы корневой контроллер не проверял, нужно ли показывать экран входа в систему.

2 ответа

Решение

Вы можете сделать это так:

func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if Settings.appSettings.authToken != nil {
        self.showMainController()
    }
    NotificationCenter.default.addObserver(forName: .authorizationOperationDidSuccess,
        object: nil, queue: nil) { (notification) in
        self.showMainController()
    }

    return true
}

private func showMainController() {
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let controller: UIViewController =
        storyBoard.instantiateViewController(withIdentifier: "Main") as UIViewController
    if self.window == nil {
        self.window = UIWindow(frame: UIScreen.main.bounds)
    }
    self.window?.backgroundColor = UIColor.white
    self.window?.rootViewController = controller
    self.window?.makeKeyAndVisible()
}

private func showAuthorizationController() {
        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let controller: UIViewController =
        storyBoard.instantiateViewController(withIdentifier: "Auth") as UIViewController
    if self.window == nil {
        self.window = UIWindow(frame: UIScreen.main.bounds)
    }
    self.window?.backgroundColor = UIColor.white
    self.window?.rootViewController = controller
    self.window?.makeKeyAndVisible()
}

При успешном входе в систему

NotificationCenter.default.post(name: .authorizationOperationDidSuccess,
                    object: nil)

Внести изменения здесь,

let auth: AuthVC =  storyBoard.instantiateViewController(withIdentifier: "Auth") as AuthVC

// AuthVC is your_VC_name

Вы все еще сталкиваетесь с проблемой, вы можете спросить.

Другие вопросы по тегам