Нажатие View Controller более одного раза не поддерживается? - PullRequest
5 голосов
/ 11 сентября 2011

Я получаю следующую ошибку всякий раз, когда пытаюсь переключить представления следующим образом:

-(void)changeView1ToView4 {
    [self.navigationController1 pushViewController:view4 animated:YES];
}

Этого не происходит при первой загрузке приложения и переходе пользователя непосредственно к этому представлению. Этот сбой происходит только тогда, когда я перехожу к одному из моих других представлений, возвращаюсь в главное меню и затем пытаюсь перейти к этому представлению.

Также, если вы еще не были уверены, я использую UINavigationController. Также этот код находится в делегате приложения, и я вызываю его из контроллера представления, у которого есть родительское представление, поэтому я использую .reference для его вызова следующим образом:

[self.reference changeView1ToView4];

Есть ли реальный способ исправить это?

Спасибо!

Edit1:

[self.navigationController1 pushViewController:view4 animated:NO];
[self.navigationController1 pushViewController:view4 animated:YES];

I tried that and got this crash message in the console:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported (<View2: 0x18d540>)'

Ответы [ 4 ]

8 голосов
/ 16 сентября 2011

При перемещении 2 представлений в стек попробуйте вызвать:

[self.navigationController1 pushViewController:view4 animated:YES];

и

[self.navigationController1 pushViewController://secondviewcontrollername// animated:NO];

Если вы попытаетесь выдвинуть более одного представления с полем animated:, установленным вДА на обоих, тогда вы путаете стек.Одновременно анимируется только один вид.

5 голосов
/ 06 марта 2012

просто к сведению, если вы вызываете setViewControllers: animated: нет необходимости вызывать pushViewController: впоследствии, в противном случае вы получите ошибку «Вызов одного и того же экземпляра контроллера представления более одного раза не поддерживается».

0 голосов
/ 03 июня 2017

Проверьте это условие перед нажатием

if (![[self.navigationController topViewController] isKindOfClass:[YOURCONTROLLER class]])
    [self.navigationController pushViewController:YOURCONTROLLER animated:YES];
0 голосов
/ 30 июня 2016
            @try {
               [self.navController pushViewController:viewController animated:NO];
            } @catch (NSException * e) {
                NSLog(@"Exception: %@", e);
                 [self.navigationController popToViewController:viewController animated:NO];
            } @finally {
                //NSLog(@"finally");
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...