无法推送 viewController,因为 navigationController 为 nil

Posted

技术标签:

【中文标题】无法推送 viewController,因为 navigationController 为 nil【英文标题】:Can't push viewController because navigationController is nil 【发布时间】:2020-05-11 07:06:56 【问题描述】:

我无法在viewControllers 之间执行转换,因为navigationControllernil。我在class 的不同部分记录了navigationController,但它到处都返回nil。在storyboard 中,viewController 嵌入在navigationController 中。我已经检查了SO 上的其他线程有同样的问题,但没有一个答案对我有帮助,甚至没有真正意义。

Can't push because self.navigationController is nil

navigationController is nil,when push the 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 没有任何反应,但会产生错误消息:

不允许在解除分配时尝试加载视图控制器的视图,这可能会导致未定义的行为

我也曾针对该错误寻找解决方案,但似乎没有明确具体的解决方法。同样,我阅读并尝试过的那些建议没有奏效。

我真的很茫然。这么简单的事情,但我什至不明白的事情阻碍了我。

编辑 如果有帮助,我有一个tab bar 和一个item 我有一个嵌入在navigationController 中的viewController,从那里我想push 到另一个viewController 在同一个storyboard .

编辑 我得到了这个工作:

 [self showViewController:viewController sender:self];

很可能是因为它不使用navigationController。它虽然显示为modular,但不是导航堆栈的一部分,这不是我想要的。很高兴知道如果navigationController 不是 nil,一切都会奏效。

【问题讨论】:

【参考方案1】:

当从导航控制器创建 segue experienceDetails 时,我重现了所描述的行为......这是解决方案

1) 删除 segue experienceDetails 表单导航控制器

2) 创建 push segue 标识符 experienceDetails 从包含的视图控制器到详细视图控制器

3) 在视图控制器中从self 执行segue,如下所示

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

【讨论】:

很好,它成功了,谢谢。仍然需要弄清楚为什么 navController 是 nil,因为我希望这个 vc 在堆栈中。

以上是关于无法推送 viewController,因为 navigationController 为 nil的主要内容,如果未能解决你的问题,请参考以下文章

推送 ViewController 时无法传输图像

使用“模态推送”到 viewController 并且无法在顶部添加 UINavigationItem-(Controller, Bar)

当应用程序被终止状态时,点击推送通知后无法导航到 ViewController

在 iOS 10 下使用 FCM 在前台单击推送通知后无法导航到特定的 viewController

推送 ViewController 时清除 navigationController 堆栈

如何通过推送从 xib 转换到 ViewController