Я разрабатываю приложение с использованием раскадровки. Эта заявка требует, чтобы пользователь вошел в систему.выполнить segue в исходный вид из любого вида с раскадровки
Раскадровка имеет вид входа в систему как начальный. Когда логин в порядке, он выполняет segue на TabViewController.
При любом вызове API я проверяю, возвращает ли сервер 401 (не авторизованный). Если это произойдет, логическое значение будет установлено в false (boolean isLogged). AppDelegate наблюдает за этим булевым. Если значение изменено на false, я хочу вернуть пользователя на экран входа в систему (помните, начальный вид на Storyboard).
Вот код:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"isLogged"]) {
BOOL logged = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
if (logged) {
NSLog(@"Logged in succesfully!");
} else {
NSLog(@"Logout performed");
[self.window makeKeyAndVisible];
[self.window layoutSubviews];
}
}
Это работает отлично, но когда я пытаюсь войти еще раз LoginOK SEGUE не выполняется.
Я пробовал много других вариантов, что-то вроде этого:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[source presentModalViewController:loginController animated:YES];
Но проблема в том, что я не знаю, какой View Controller выполнил выход из системы. Источник должен быть текущим View Controller, показанным в приложении, не так ли?
Как вы отклонили свой логин? Я получаю 'Предупреждение: попытка отклонить из контроллера представления, пока выполняется презентация или увольнение!' Error :( –
expert
Теперь я заменяю rootViewController с помощью loginViewController. Итак: self.view.window. rootViewController = [self.view.window.rootViewController.storyboard instantiateViewControllerWithIdentifier: @ "LoginView"]; –