如何在 swift 中使用 UserDefaults 实现登录/注销导航?
Posted
技术标签:
【中文标题】如何在 swift 中使用 UserDefaults 实现登录/注销导航?【英文标题】:How I can implement Login / Logout Navigation using UserDefaults in swift? 【发布时间】:2019-10-18 05:05:30 【问题描述】:****每次运行应用程序时,我都必须登录才能进入应用程序的主页。
当我点击登录按钮直到我点击注销按钮时,如何存储会话。
所以,我每次运行应用程序时都可以避免登录。
请帮帮我……
其他解决方案不起作用。
class LoginViewController: UIViewController
@IBOutlet weak var password: UITextField!
@IBOutlet weak var loginName: UITextField!
@IBAction func submitButton(_ sender: Any)
UserDefaults.standard.set(true, forKey: "isLoggedIn")
if loginName.text == "test" && password.text == "test"
UserDefaults.standard.set(true, forKey: "status")
Switcher.updateRootVC()
else
print("Invalid credentials")
class ProfileViewController: UIViewController
@IBAction func submitButton(_ sender: Any)
UserDefaults.standard.set(false, forKey: "status")
Switcher.updateRootVC()
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
func loadBaseController()
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
guard let window = self.window else return
window.makeKeyAndVisible()
if UserDefaults.standard.bool(forKey: "isLoggedIn") == false
let loginVC: ViewController = storyboard.instantiateViewController(withIdentifier: "login") as! ViewController
self.window?.rootViewController = loginVC
else
let homeVC: HomeViewController = storyboard.instantiateViewController(withIdentifier: "showData") as! HomeViewController
let navigationHomeVC = UINavigationController(rootViewController: homeVC)
self.window?.rootViewController = navigationHomeVC
self.window?.makeKeyAndVisible()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
self.loadBaseController()
return true
我引用了此链接https://medium.com/@paul.allies/ios-swift4-login-logout-branching-4cdbc1f51e2c 的相同方法,但它没有用,因为我没有得到预期的结果。 我是正确的状态码,但不是正确的视图控制器。 请帮我解决这个问题............
在给定的链接中,它将TabbarVc
添加到tabor
【问题讨论】:
检查您在 Appdelegate 中的 isLoggedIn 值,并从 Appdelegate 文件中显示您的控制器。在 Appdelegate 文件中你想设置你的 rootView 控制器。 好的。我会检查它 我检查了,但我不知道在应用程序委托中设置值isLoggedIn
的位置
【参考方案1】:
在 Xcode 11 中,我们创建一个新项目时有 2 个文件,因此如果您想从委托文件中更改 rootViewController,则需要从 SceneDelegate.swift 文件中加载该控制器。 p>
//SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
guard let windowScene = (scene as? UIWindowScene) else return
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
self.loadBaseController()
func loadBaseController()
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
guard let window = self.window else return
window.makeKeyAndVisible()
if UserDefaults.standard.bool(forKey: "isLoggedIn") == false
let loginVC: ViewController = storyboard.instantiateViewController(withIdentifier: "login") as! ViewController
self.window?.rootViewController = loginVC
else
let homeVC: HomeViewController = storyboard.instantiateViewController(withIdentifier: "showData") as! HomeViewController
let navigationHomeVC = UINavigationController(rootViewController: homeVC)
self.window?.rootViewController = navigationHomeVC
self.window?.makeKeyAndVisible()
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。SceneDelegate.swift
我没有这个文件....我的项目是上周在 Xcode 11 中创建的,我刚刚更新了我的 xcode
检查我通过引用媒体链接medium.com/@paul.allies/… 尝试的更新代码,但仍然没有得到答案....
我可以在 AppDelegate.swift 中添加相同的代码吗,因为我在 xcode10 中创建了项目。当我创建演示时,这对我有用
当我在真实的应用程序中尝试时,我的应用程序崩溃了【参考方案2】:
您必须使用 SceneDelegate 来解决此问题,如先前评论中所述。 但是如果你仍然想使用 Switcher Class 来做到这一点。 这是解决方案: Add-> private(set) static var shared: SceneDelegate? and Self.shared = self Switcher.updateRootVC()
在添加这些行之后。 现在像这样编辑 Switcher 类:
Modify the switcher class like this.
现在您可以使用切换器类从任何地方切换..
【讨论】:
以上是关于如何在 swift 中使用 UserDefaults 实现登录/注销导航?的主要内容,如果未能解决你的问题,请参考以下文章