Не могу pu sh viewController, потому что навигационный контроллер равен нулю - PullRequest
1 голос
/ 25 января 2020

Я не могу выполнить переход между viewControllers, потому что navigationController равен nil. Я зарегистрировал navigationController в разных частях class, но везде он возвращает ноль. В storyboard viewController встроен в navigationController. Я проверил другие темы на SO с той же проблемой, но ни один из ответов не помог или даже не имел смысла для меня.

Невозможно pu sh, поскольку self.navigationController равен nil

navigationController равен нулю, когда pu sh viewcontroller

Почему это ноль? И как мне это решить? Также возвращается сообщение об ошибке:

Я пробовал использовать segue:

 [self.navigationController performSegueWithIdentifier:@"experienceDetails" sender:self];

и нажать:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Inspiration" bundle:nil];
ExperienceViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"experience"];            
[self.navigationController pushViewController:viewController animated:NO];          

Ничего не происходит с помощью push, но выдается сообщение об ошибке:

Попытка загрузить представление контроллера представления во время его освобождения недопустима и может привести к неопределенному поведению

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

Я действительно в растерянности. Такая простая вещь, но мне мешает что-то, чего я даже не понимаю.

РЕДАКТИРОВАТЬ Если это поможет, у меня есть tab bar и в одном item у меня есть viewController, который встроен в navigationController, и оттуда я хочу push к другому viewController в том же storyboard.

РЕДАКТИРОВАТЬ Я получил это на работу:

 [self showViewController:viewController sender:self];

очень вероятно, потому что он не использует navigationController. Он представлен как modular, хотя и не является частью стека навигации, чего я не хочу. Просто приятно знать, что все будет работать, если navigationController не равен нулю.

1 Ответ

1 голос
/ 25 января 2020

Я воспроизвел описанное поведение, когда segue experienceDetails был создан из контроллера навигации ... и вот решение

1) удалено segue experienceDetails форма контроллера навигации

2) создано push segue с идентификатором experienceDetails от включенного контроллера вида до контроллера подробного вида

3) в контроллере представления выполняется переход от self, как показано ниже

[self performSegueWithIdentifier:@"experienceDetails" sender:self];
...