导航控制器为空

Posted

技术标签:

【中文标题】导航控制器为空【英文标题】:Navigation Controller is null 【发布时间】:2011-08-11 17:04:17 【问题描述】:

我有一个拆分视图应用程序,允许用户选择并显示所选图像的缩略图。我使用 Interface Builder 在 detailViewController 中放置了一个 UIButton。按下此按钮时,我希望将其更改为图像的全屏视图。我已经设置了一个新的视图控制器,称为 FullViewController,并认为我已经连接了所有东西。问题是。我将 AppDelegate.m 调整为以下内容:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     
// Override point for customization after app launch.
// Set the split view controller as the window's root view controller and display.
self.window.rootViewController = self.splitViewController;
UINavigationController *nvcontrol =[[UINavigationController alloc] initWithRootViewController:fullViewController];
[window addSubview:nvcontrol.view];
[self.window makeKeyAndVisible];
return YES;

这是 DetailViewController.m 中的函数,当按下按钮时会调用它。导航控制器在此处显示为 null。

//Function called when button is pressed - should bring up full screen view
- (IBAction) pressFullViewButtonFunction: (id) sender
//viewLabel.text = @"Full View";    
if (fullViewController == nil)
    FullViewController *fullViewController = [[FullViewController alloc] initWithNibName:@"FullViewController" bundle:[NSBundle mainBundle]];
    NSLog(@"fullViewController is %@", fullViewController);
    self.fullViewController =  fullViewController;

NSLog(@"self.navigationController is %@",self.navigationController);//this is null
[self.navigationController pushViewController:self.fullViewController animated:YES];

我不确定如何解决这个问题。我尝试在 AppDelegate 中添加几行,但是当它运行时,根视图中的表格不会显示,并且它不再在纵向和横向视图之间正确切换。

如果这有助于澄清,我可以随时使用其余代码。让我知道! 谢谢。

【问题讨论】:

【参考方案1】:

从您发布的代码中无法识别问题,但self.navigationController 为 nil 的两个常见原因是:

    你一开始没有将self后面的对象推到导航控制器上;确实如此,因为导航控制器是作为拆分视图控制器的子视图添加的;可能你的意思是相反的...不确定...

    (1 的子情况)您使用presentViewControllerModally 显示了self 后面的对象。

当我说“self 背后的对象”时,我指的是定义 pressFullViewButtonFunction 的类的实例。

如果您需要更多帮助,请将您的控制器推送到导航控制器的代码发布...

顺便说一句,如果你这样做:

UINavigationController *nvcontrol =[[UINavigationController alloc] initWithRootViewController:fullViewController];

nvcontrol 不是 ivar,那么你就有泄漏。

希望这会有所帮助...

【讨论】:

以上是关于导航控制器为空的主要内容,如果未能解决你的问题,请参考以下文章

TabBarViewController 的导航栏覆盖来自导航控制器的导航栏

为啥我无法编辑嵌入了导航控制器的导航栏?

停止从导航控制器快速导航

如何将自定义导航栏链接到导航控制器?

停止导航控制器swift的导航

导航控制器:窗口上导航控制器中最上面的视图控制器下方是啥?