在显示视图之前检查 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 中,但我希望这对您有所帮助!
目前,我有 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 中,但我希望这对您有所帮助!