在显示视图之前检查 NSUserDefaults

Checking NSUserDefaults before view is shown

目前,我有 2 个 UIView - 登录视图和用户配置文件视图。

我会检查用户是否使用 viewDidLoad() 登录到登录视图。如果是,它将打开用户配置文件视图。


但是,如果用户已登录,此方法会在转到用户配置文件视图之前打开登录视图大约 1 秒。

在决定打开哪个屏幕之前,是否有更好的方法来检查用户是否登录?


故事板


代码

override func viewDidLoad() {
    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    let isLoggedIn:Int = prefs.integerForKey("ISLOGGEDIN") as Int
    if (isLoggedIn == 1) {
        self.performSegueWithIdentifier("goto_userprofile", sender: self)
    }
    super.viewDidLoad()
}

您需要签入应用程序 didFinishLaunchingWithOptions 而不是 viewDidLoad() 以防止登录屏幕闪烁。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    NSString *board = @"your storyboard file name"
    NSString *identifier;
    NSString *user = [[NSUserDefaults standardUserDefaults] valueForKey:@"your key"];

    if(user != nil){
        identifier = @"profile";
        //User is logged in. Go to profile page
    }
    else
        identifier = @"login";
        //User is not logged in. Go to login page

    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:board bundle:nil];

    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:identifier];

    [UIApplication sharedApplication].applicationIconBadgeNumber=10;
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

在 AppDelegate 文件中实现此代码后,您需要在界面生成器中打开故事板文件。

您需要在上面的身份检查器中找到它。在您的登录视图控制器上,设置 Storyboard ID 以登录。将配置文件 View Controller Storyboard ID 设置为配置文件。再次抱歉,这是在 Objective-C 中,但我希望这对您有所帮助!