什么在viewDidLoad之前运行?

时间:2012-11-18 09:40:24

标签: xcode viewdidload

我需要设置和存储一些可以与View一起使用的NSUserDefaults数据。这不适用于viewDidLoad。

可以这样做吗? 在viewDidLoad之前我可以使用什么方法? 你会推荐什么?

4 个答案:

答案 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")
    }

这样,您可以有条件地在视图控制器之间切换。如果用户已经通过身份验证,则需要显示主屏幕。