Извинения за двусмысленность вопроса; Я постараюсь пояснить здесь более ясную картину.
Проблема
У меня есть код в AppDelegate.swift
, который выполняет условную навигацию; если пользователь вошел в систему (и, следовательно, currentUser
не nil
), приложение запустится в View
, контроллере представления в раскадровке Main
. В противном случае, если пользователь не вошел в систему, приложение запустится в Welcome
, контроллере представления в Auth
раскадровке.
Ниже приведен мой код из AppDelegate.swift
, ViewController.swift
( который равен View
) и WelcomeViewController
.
Примечание:
View
- это идентификатор раскадровки, который я установил для ViewController
; Welcome
- это идентификатор раскадровки, который я установил для WelcomeViewController
.
AppDelegate.swift
import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configures the Firebase library.
FirebaseApp.configure()
// Performs conditional navigation on the condition of currentUser's status.
self.window = UIWindow(frame: UIScreen.main.bounds)
let user = Auth.auth().currentUser
if user != nil {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController = storyboard.instantiateViewController(identifier: "View")
window?.rootViewController = rootViewController
UIView.animate(withDuration: 0.5) {
self.window?.makeKeyAndVisible()
}
} else {
let storyboard = UIStoryboard(name: "Auth", bundle: nil)
let rootViewController = storyboard.instantiateViewController(identifier: "Welcome")
window?.rootViewController = rootViewController
UIView.animate(withDuration: 0.5) {
self.window?.makeKeyAndVisible()
}
}
return true
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("ViewController presented.")
}
}
WelcomeViewController.swift
import UIKit
class WelcomeViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("WelcomeViewController presented.")
}
}
Ожидания
Приложение свежеустановлено на Симуляторе, а значит, currentUser
быть не должно (и при отладке подтверждается). Поэтому я ожидал увидеть это как вывод в консоли:
WelcomeViewController presented.
Вместо этого это отображается в консоли:
WelcomeViewController presented.
ViewController presented.
Попытки
До сих пор я думал, что проблема могла возникнуть из-за того, что раскадровка Main
является раскадровкой по умолчанию, установленной с момента создания проекта. Поэтому я попытался снять флажок «Контроллер начального представления» для двух контроллеров представления. Как я и ожидал, вместо него появляется следующее:
WelcomeViewController presented.
2020-06-20 11:39:38.724658+0800 AppName[11439:237509] [WindowScene] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
Что мне делать, чтобы убедиться, что ViewController
не появляется, а заменить WelcomeViewController
? Любая помощь приветствуется, спасибо!