Как оставаться в системе Firebase iOS13 + - PullRequest
0 голосов
/ 13 июля 2020

Этот вопрос уже задавался здесь, и решение больше не актуально, потому что в iOS13 есть некоторые изменения. Как я могу оставаться в системе после закрытия приложения и его повторного открытия.

У меня есть WelcomeViewController, которое появляется, когда вы не вошли в систему, и класс CoffeeViewController: UIViewController, который должен появиться, если пользователь вошел в систему .

class CoffeeViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()
        checkAuthn()
}

  func checkAuthn() {
             if Auth.auth().currentUser == nil {
                 DispatchQueue.main.async {
                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    let initialViewController = storyboard.instantiateViewController(withIdentifier: "welcomeScreen") as? WelcomeViewController
                    self.present(initialViewController!, animated: true, completion: nil)
                 }
             } else {
            print("Done")
             }
         }

}

и я знаю, что должен реализовать контроллер rootview в SceneDelegate (ранее это было в методе didFinishLaunchingWithOptions). И я не знаю, как это сделать правильно. Я пробовал этот способ, но у меня не получилось.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
       let vc = CoffeeViewController()
       let nc = UINavigationController(rootViewController: vc)
        window?.rootViewController = nc
        window?.makeKeyAndVisible()
        
    }

------------------------- Часть 2- -----------------------------------------

после этого изменения в sceneDelegate:

guard let windowsScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = UINavigationController(rootViewController: CoffeeViewController())
        window?.makeKeyAndVisible()

Я получаю сообщение об ошибке:

ошибка

------------------------- Решение, часть 3 ------------- ---------------------

Я заменил код в sceneDelegate, и он работает нормально.

guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        let homeVC = UIStoryboard(name:"Main", bundle: nil).instantiateViewController(withIdentifier: "ShopsMain") as! CoffeeViewController
        let navC = UINavigationController(rootViewController: homeVC)
        window?.rootViewController = navC
        window?.makeKeyAndVisible()

1 Ответ

0 голосов
/ 13 июля 2020

Вам необходимо инициализировать window в UISceneDelegate.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(windowScene: windowScene)
    window?.rootViewController = UINavigationController(rootViewController: CoffeeViewController())
    window?.makeKeyAndVisible()
}
...