Проверка 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, но я надеюсь, что это поможет!

Другие вопросы по тегам