iphone - UIViewController 的 navigationController 为 nil

标签 iphone objective-c ios uiviewcontroller uinavigationcontroller

我正在尝试从 UIViewController 访问 navigationController,由于某种原因它等于 nil

应用委托(delegate):

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

主视图 Controller :

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

有人遇到过这个问题吗?

谢谢!

最佳答案

您所做的大部分代码都是正确的,但并非所有代码都在正确的地方。 你是正确的, UINavController 应该用 View Controller 初始化。 但是,在您发送的代码中,MainViewController 的 init 方法在导航 Controller 初始化之前完成。

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

应用委托(delegate):

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

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

关于iphone - UIViewController 的 navigationController 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434130/

相关文章:

iphone - 导出 iPhone 地址簿数据库的可能方法

iphone - 从 tableView 中删除记录 - 初学者

ios - 我可以快速访问 touchBegan 方法中的 touched 节点属性吗?

ios - 完全免费的 iOS 应用是否需要应用商店收据验证?

ios - 为什么我的 React Native 桥接 iOS 组件不起作用?

iphone - iphone 中的 Adwhirl 集成问题

iphone - 输入电子邮件地址时如何模仿 iPhone 邮件应用程序的行为?

objective-c - 新的自动引用计数机制如何工作?

objective-c - 递归删除树目录结构中的空项

ios - 如果 App Store iOS 中有新版本的应用程序可用,是否有适当的方法在应用程序内通知用户?