Несбалансированные вызовы для начала/конца переходов внешнего вида (я полагаю, что это связано с UINavigationController)

Похоже, эта тема всплывает очень часто. Я прочитал несколько ответов, но ни один из них не был таким же, как у меня, поэтому, пожалуйста, извините меня, если вы видели подобное раньше.

Все мои 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];
    }

}

person VaporwareWolf    schedule 25.06.2013    source источник
comment
На самом деле, похоже, что мой вызов SMAuthenticate дважды вызывает блок завершения, что имеет смысл, учитывая ошибки. Однако это другая история.   -  person VaporwareWolf    schedule 26.06.2013


Ответы (1)


Вы, вероятно, реализовали следующие пользовательские методы контейнера ViewController:

- (void)endAppearanceTransition
- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated

Однажды я написал и забыл их в базовом классе, и они испортили весь внешний вид, перенаправляя его на дочерние контроллеры при использовании раскадровок.

person ehrpaulhardt    schedule 06.11.2013