Проверка NSUserDefaults перед отображением представления
В настоящее время у меня есть 2 UIViews - вид входа в систему и профиль пользователя.
Я бы проверил, вошел ли пользователь в окно входа в систему, используя 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()
}
1 ответ
Вам нужно проверить в приложении 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 для входа в систему. Установите профиль Просмотр идентификатора раскадровки контроллера в профиль. Еще раз извините, это в Objective-C, но я надеюсь, что это поможет!