导航控制器推送零视图控制器错误

Posted

技术标签:

【中文标题】导航控制器推送零视图控制器错误【英文标题】:Navigation controller push nil view controller error 【发布时间】:2011-06-02 16:31:35 【问题描述】:

我的应用中的导航控制器出现了一些问题。从 RootViewController 移动到 UITableViewController 工作正常。我现在想要多一层向下钻取,因此用户从列表中选择一个项目并出现一个新屏幕,如下所示:

RootViewController --> TableViewController --> ItemViewController

我使用了完全相同的代码来切换第一个视图,但我得到了:

Application tried to push a nil view controller on target <UINavigationController...

代码和第一个一样,怎么可能是nil呢?

在 RootViewController.h 中:

@interface RootViewController : UIViewController 
    IBOutlet TableViewController *tableViewController;


@property (nonatomic, retain) TableViewController * tableViewController;

在.m文件中我综合了属性,然后使用按钮调用:

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

在 TableViewController.h 中:

#import "ItemDetailViewController.h"

@class TableViewController;

@interface TableViewController : UITableViewController 
    IBOutlet ItemDetailViewController * itemDetailViewController;


@property (nonatomic, retain) ItemDetailViewController * itemDetailViewController;

@end

再一次,我在 .m 文件中合成它并使用代码将新视图推送到didSelectRowAtIndexPath:

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

当您点击某个项目时,我会收到上面的错误消息。有谁知道为什么会这样?

【问题讨论】:

“itemDetailViewController”和“plantDetailViewController”有什么联系? 对不起,错字!更改了名称以使其更易于阅读。 3 个笔尖,每个视图一个。 RootViewController、TableViewController、ItemViewController。 【参考方案1】:

此错误的最常见原因是无法将itemDetailViewController 连接到 IB 中的实际对象。请注意,您通常应该将 IBOutlet 指示符放在属性上而不是 ivar 上。

【讨论】:

一切都按照 RootViewController 连接起来,并且所有连接都在那里并且正确。但是,我会切换 IBOutlet 指示符,也许是这样? 在调试器中,itemDetailViewController 是 nil 吗? TableViewController viewDidLoad 是 nil 吗?如果是这样,那么你就没有连接到你认为你连接到的东西。 如何检查?您的意思是使用工具并检查内存分配吗? 好的,刚刚做了一个 if 语句来检查 self.itemDetailViewController 是否为 nil,它是。知道为什么吗?一切都肯定与第一个视图相同。 也可以设置断点和po itemDetailViewController。一个常见的原因是您的 NIB 尚未加载(viewDidLoad 尚未运行)。在第一次访问视图之前不会发生这种情况。另一个常见的错误是有重复的对象。当人们在 NIB 中连接一个对象并使用+alloc 创建同一类的对象时,通常会发生这种情况。这两个对象不相关。另一种可能性是您没有加载您认为的NIB。在-viewDidLoad 中设置断点,看看什么时候发生。

以上是关于导航控制器推送零视图控制器错误的主要内容,如果未能解决你的问题,请参考以下文章

推送视图控制器时,导航栏上出现 iOS 11 黑条

当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器

如何导航到推送通知上的视图控制器

导航项标题视图 - 所有推送视图控制器都相同

推送导航控制器堆栈后视图不显示

为啥我不能在我的导航控制器中推送视图控制器?