我需要设置和存储一些可以与View一起使用的NSUserDefaults数据。这不适用于viewDidLoad。
可以这样做吗? 在viewDidLoad之前我可以使用什么方法? 你会推荐什么?
答案 0 :(得分:2)
UIViewController
上有几种方法肯定会在viewDidLoad
之前运行 - 这是您的代码的适当位置取决于您的具体问题和架构。
initWithNibName:bundle:
loadView
是设置视图的代码另一个选项是在视图控制器初始化之前确保默认值由其他组件设置。这可以在工作流的前一部分的视图控制器中,或由应用程序委托初始化。
答案 1 :(得分:2)
applicationDidFinishLaunching听起来像是默认的好地方
答案 2 :(得分:0)
在您应用的AppDelegate中试用
答案 3 :(得分:0)
这是使用UserDefaults保留应用程序登录状态的示例:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// You can keep your Google API keys here(if you have any)
let storyBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
let homeScreen = storyBoard.instantiateViewController(withIdentifier: "YourHomecontroller") as? ViewController
if(UserDefaults.standard.isLoggedIn()){
self.window?.rootViewController = homeScreen
}else{
let loginScreen = storyBoard.instantiateViewController(withIdentifier: "LoginViewController")
self.window?.rootViewController = loginScreen
}
return true
}
并使用以下方法扩展UserDefaults:
// this is used to serialize the boolean value:isLoggedIn
func setIsLoggedIn(value:Bool){
setValue(value, forKey: "isLoggedIn")
UserDefaults.standard.synchronize()
}
// this method is used to check the value for isLoggedIn flag
func isLoggedIn() -> Bool{
return bool(forKey: "isLoggedIn")
}
这样,您可以有条件地在视图控制器之间切换。如果用户已经通过身份验证,则需要显示主屏幕。