用户默认值不会实例化视图控制器
User Defaults Won't Instantiate View Controller
当用户登录到我的应用程序时,Swift UserDefault 会为键“isLogged”保存并设置为 true。如果此 UserDefault 的值为真,我的目标是让应用程序委托显示不同的视图控制器。
为了得到这个 运行 我已经努力了几个星期,因此想看看是否有人知道任何问题。我在 AppDelegate.swift 中调用一个函数来实例化视图控制器,但由于某种原因,视图控制器从未显示。打印语句执行了,所以我知道设置了值,但是为什么没有显示视图控制器?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
checkDefault()
return true
}
func checkDefault() {
if (UserDefaults.standard.bool(forKey: "isLogged") == true) {
print("LoggedIn is true")
let vc = UIStoryboard(name: "Main", bundle:
Bundle.main).instantiateViewController(withIdentifier:
"parent_vc") as! ParentHomeViewController
let navVC = UINavigationController(rootViewController: vc)
let share = UIApplication.shared.delegate as? AppDelegate
share?.window?.rootViewController = navVC
share?.window?.makeKeyAndVisible()
}
}
谢谢!
您应该在 SceneDelegate.swift
中调用您的 checkDefault()
。
确切地说,你必须调用函数,
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
为了进一步阅读和理解,您可以使用这个
https://medium.com/@kalyan.parise/understanding-scene-delegate-app-delegate-7503d48c5445
供参考。
我对您的代码进行了一些更改,并且工作正常。
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "parent_vc") as! ParentHomeViewController
let navVC = UINavigationController(rootViewController: initialViewController)
self.window?.rootViewController = navVC
self.window?.makeKeyAndVisible()
当用户登录到我的应用程序时,Swift UserDefault 会为键“isLogged”保存并设置为 true。如果此 UserDefault 的值为真,我的目标是让应用程序委托显示不同的视图控制器。
为了得到这个 运行 我已经努力了几个星期,因此想看看是否有人知道任何问题。我在 AppDelegate.swift 中调用一个函数来实例化视图控制器,但由于某种原因,视图控制器从未显示。打印语句执行了,所以我知道设置了值,但是为什么没有显示视图控制器?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
checkDefault()
return true
}
func checkDefault() {
if (UserDefaults.standard.bool(forKey: "isLogged") == true) {
print("LoggedIn is true")
let vc = UIStoryboard(name: "Main", bundle:
Bundle.main).instantiateViewController(withIdentifier:
"parent_vc") as! ParentHomeViewController
let navVC = UINavigationController(rootViewController: vc)
let share = UIApplication.shared.delegate as? AppDelegate
share?.window?.rootViewController = navVC
share?.window?.makeKeyAndVisible()
}
}
谢谢!
您应该在 SceneDelegate.swift
中调用您的 checkDefault()
。
确切地说,你必须调用函数,
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
为了进一步阅读和理解,您可以使用这个 https://medium.com/@kalyan.parise/understanding-scene-delegate-app-delegate-7503d48c5445 供参考。
我对您的代码进行了一些更改,并且工作正常。
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "parent_vc") as! ParentHomeViewController
let navVC = UINavigationController(rootViewController: initialViewController)
self.window?.rootViewController = navVC
self.window?.makeKeyAndVisible()