UINavigationController проблема с popToRootViewController

Итак, допустим, что я нахожусь в viewcontroller, C, и я хочу перейти к viewcontroller D (который здесь - вот так: viewView). Итак, вот что я сделал:

VoteViewController * voteView = [[VoteViewController alloc] init];
        voteView.voteInfo = [array objectAtIndex:0];

    NSArray * viewControllers = [self.navigationController viewControllers];
    if ([[viewControllers objectAtIndex:0] isKindOfClass:[ListViewController class]]){
        NSLog(@"LIST VIEW");
    } else if ([[viewControllers objectAtIndex:0] isKindOfClass:[SpotListingViewController class]]){
        NSLog(@"SPOT LISTING");
    }

    [self.navigationController setViewControllers:[NSArray arrayWithObjects:[viewControllers objectAtIndex:0], [viewControllers objectAtIndex:1], voteView, nil]];
    [voteView release];

Запустив приведенный выше код, он печатает LIST VIEW, что означает, что RootViewController является ListViewController. Теперь теоретически в VoteViewController, когда я делаю, как показано ниже:

 if ([[viewControllers objectAtIndex:0] isKindOfClass:[ListViewController class]]){
            NSLog(@"LIST VIEW");

он должен напечатать LIST VIEW, однако это не так. Почему это? Я также проверил количество контроллеров представления, и это только 2. Почему это отличается?

1 ответ

Решение

Если ваш запрос о переходе на View Controller D (или voteView), вы должны делать-

[self.navigationController pushViewController:voteView animated:YES];

Связанные с вашим вопросом, когда вы звоните setViewControllers: и доступ к объекту по индексу 1, вы гарантировали, что массив имеет два объекта? В каком методе voteView ты положил NSLog?

Другие вопросы по тегам