Я довольно новичок в программировании, поэтому я не могу понять, как решить эту проблему. Я реализовал rootviewcotnroller в делегате приложения, чтобы, если пользователь вошел в систему, он был перемещен непосредственно в содержимое приложения, а не в контроллер представления входа. Однако на самом деле это не работает. Как уже было сказано, я добавил в делегат приложения следующий код:
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = MainViewController()
Контроллер MainView настроен следующим образом:
class MainViewController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
if isLoggedIn() {
let homeController = UserViewController()
viewControllers = [homeController]
}else {
perform(#selector(showLoginController), with: nil, afterDelay: 0.01)
}
}
fileprivate func isLoggedIn() -> Bool {
return UserDefaults.standard.isLoggedIn()
}
func showLoginController() {
let loginController = LoginViewController()
present(loginController, animated: true, completion: {
})
}
}
В Userviewcontroller я добавил следующие строки:
func handleSignout() {
UserDefaults.standard.setisLoggedIn(value: false)
print("is logged out")
}
@IBAction func SignOut(_ sender: Any) {
handleSignout()
if FIRAuth.auth()!.currentUser != nil {
do {
try? FIRAuth.auth()?.signOut()
if FIRAuth.auth()?.currentUser == nil {
let loginViewViewcontroller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Login") as! LoginViewController
self.present(loginViewViewcontroller, animated: true, completion: nil)
}
}
}
}
Затем я создал расширение с UserDefaults, чтобы сохранить логическое значение независимо от того, вошел ли пользователь в систему или вышел из нее:
extension UserDefaults {
enum UserDefaultKeys: String {
case isLoggedIn
}
func setisLoggedIn(value: Bool) {
set(false, forKey: UserDefaultKeys.isLoggedIn.rawValue)
synchronize()
}
func isLoggedIn() -> Bool {
return bool(forKey: UserDefaultKeys.isLoggedIn.rawValue)
}
}
В LoginviewController, который просто показывает черный экран, если он отображается с первого взгляда, я добавил:
func finishLoggingIn() {
let rootViewController = UIApplication.shared.keyWindow?.rootViewController
guard let MainNavigationController = rootViewController as? MainViewController else {return}
MainNavigationController.viewControllers = [UserViewController()]
print("is logged in")
UserDefaults.standard.setisLoggedIn(value: true)
dismiss(animated: true, completion: nil)
}
Эта функция вызывается, когда пользователь нажимает кнопку входа в систему.
Приложение распознает, вошел ли пользователь в систему или нет, но не имеет значения, вошел ли пользователь в систему или нет, представленный контроллер первого представления показывает черный экран, который, скорее всего, является контроллером входа в систему, но если пользователь вошел в систему в userviewcontroller также отображается черный экран, если представлен первый контроллер представления. ...
Кто-нибудь знает, почему это так?