Похоже, что LoginVC подключен к нескольким Segue.
Лучший способ справиться с этим процессом входа в систему - это использовать делегата для ViewController для входа в систему.Затем в главном VC вы проверяете учетные данные или что-то еще, и при необходимости вызываете executeSegue для LoginVC.Когда вход успешен, вы вызываете метод делегата, и Главный VC отклоняет модальное представление.LoginVC действительно не должен быть частью навигации или подключен к каким-либо другим Segues, кроме одного из Main VC.У меня есть полный пример, если вам это нужно, но это легко реализовать с помощью методов делегатов.
Вот вам: LoginViewController.h:
@protocol LoginViewControllerDelegate
-(void)finishedLoadingUserInfo;
@end
@interface LoginViewController : UIViewController <UITextFieldDelegate>{
id <LoginViewControllerDelegate> delegate;
}
LoginViewController.m:
@synthesize delegate;
- (void) onResponse:(NSMutableDictionary *)response {
NSLog(@"Login successful,token received");
// if the Login was successful,store the token
NSUserDefaults* userPref = [NSUserDefaults standardUserDefaults];
[userPref setObject:[response objectForKey:@"Token"] forKey:@"AuthToken"];
[userPref synchronize];
//..and let the user getting in
[delegate finishedLoadingUserInfo];
}
В файле .m Dashboard VC:
#pragma mark - LoginViewController Delegate Method
-(void)finishedLoadingUserInfo
{
// Dismiss the LoginViewController that we instantiated earlier
[self dismissModalViewControllerAnimated:YES];
// Do other stuff as needed
}
Таким образом, суть заключается в проверке учетных данных при загрузке приложения и, если необходимо, вызове (в VC Dashboard):
[self performSegueWithIdentifier:@"sLogin" sender:nil];
Затем в методе prepareForSegue (в VC Dashboard):
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"sLogin"]) {
LoginViewController *livc = segue.destinationViewController;
livc.delegate = self; // For the delegate method
}
}
Обязательно назовите Segue sLogin, иначе это не сработает:)