Похоже, эта тема всплывает очень часто. Я прочитал несколько ответов, но ни один из них не был таким же, как у меня, поэтому, пожалуйста, извините меня, если вы видели подобное раньше.
Все мои UIViewController контролируются UINavgationController. В первом UIViewController (SMOnboardingPhotoMarketingViewController) я вызываю класс-оболочку цепочки для ключей, чтобы узнать, кто-нибудь вошел в систему (возобновление работы приложения). Если это так, я вызываю переход, чтобы перейти к моему основному экрану входа в систему (SMThumbnailViewController), где я получаю сообщение об ошибке: несбалансированные вызовы для начала/конца переходов внешнего вида для .
Я изучил все вызовы жизненного цикла контроллера представления, чтобы убедиться, что я вызываю [суперметод], если я их игнорирую. Сделанный.
Помимо этого, это просто стандартный переход типа push для всех переходов. Я не понимаю, чем так отличается этот вызов перехода от всех остальных, которые запускаются действиями кнопки. Вот код моего первого контроллера представления:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self loadScrollViewContent];
__weak SMOnboardingPhotoMarketingViewController *weakSelf = self;
[SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
if(valid){
NSLog(@"Logged in. Continue to thumbs page");
[weakSelf performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
}
else{
[SMAuthentication logOut];
NSLog(@"invalid credentials stored. User must log in ");
}
}];
}
Я заметил, что в моем контроллере основного представления (тот, к которому переходит приведенный выше код) вызывается viewDidLoad, но никогда не вызывается viewDidAppear. Что могло вызвать такой дисбаланс?
Изменить: добавление информации. Я должен заявить, что если я перенесу вызов перехода за пределы этого блока, переход пройдет как обычно, без ошибок. Пример:
// I know this is ugly. It is for testing only
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self loadScrollViewContent];
__block BOOL complete = NO;
__block BOOL isValid = NO;
[SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
if(valid){
NSLog(@"Logged in. Continue to thumbs page");
isValid = YES;
}
else{
[SMAuthentication logOut];
NSLog(@"invalid tokens stored. User must log in ");
}
complete = YES;
}];
while (!complete) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
if(isValid){
[self performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
}
}