7

我试图从 访问navigationControllerUIViewController由于某种原因它等于nil

应用委托:

self.mainViewController = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainViewController];
self.window.rootViewController = self.navigationController;

主视图控制器:

 MyViewController *myViewController = [[MyViewController alloc] init];
[self.navigationController presentModalViewController:myViewController animated:YES];

有人遇到过这个问题吗?

谢谢!

4

3 回答 3

2

您正在编写大部分正确的代码,但并非所有代码都在正确的位置。你是正确的 UINavController 应该用视图控制器初始化。但是,在您发送的代码中,MainViewController 的 init 方法在导航控制器初始化之前完成。

这是因为您真的不应该让 MainViewController 决定何时展示自己。它应该由自身之外的东西初始化和呈现——在这种情况下是 AppDelegate。

应用委托:

MainViewController *mvc = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = self.navigationController;

如果您随后需要 MainViewController 以模态方式呈现某些内容,则应在 viewWillAppear: 或 viewDidLoad: 中进行,而不是在其 init 方法中。showMyModal或者,在 MainViewController ( ) 上创建应用程序委托可以调用的公共方法。

于 2012-11-18T18:00:43.853 回答
1

创建 UINavigationController 将您的视图控制器分配给它的根。

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: myViewController];
[self presentViewController:navController animated:YES completion:nil];
于 2013-08-21T16:48:05.883 回答
0

UIViewController 可能没有 UINavigationController。
导航控制器只有在您明确设置时才拥有某些控制器:

[yourNavController setViewControllers: @[ yourViewController1, ... , yourViewControllerN] ];
于 2012-11-17T20:03:35.220 回答