self.navigationController 第二次加载 ViewController 时为零

Posted

技术标签:

【中文标题】self.navigationController 第二次加载 ViewController 时为零【英文标题】:self.navigationController is nil second time ViewController is loaded 【发布时间】:2013-07-10 16:27:21 【问题描述】:

我在 UIViewControllers 上实现了一个委托/处理程序,用于处理远程 Web 服务的超时。当向我的 web 服务发出请求并返回超时 http 代码时,将调用委托并执行以下操作:

UINavigationController *navController = self.navigationController;

if (navController) 
    [navController popToRootViewControllerAnimated:YES];
 else 
    NSLog(@"navController is null/nil");

如果我执行以下步骤,navController 会正确实例化,并会发生popToRootViewController 操作。

    使用登录视图控制器上的网络服务对我的应用进行身份验证 自动触发对 CustomMenuViewController 的 segue 等待网络服务远程超时 点击触发到 CustomSubMenuViewController 的 segue

现在,如果我执行以下步骤,则会触发上述代码块中的 else 子句,因为由于某些原因 navController 未正确设置:

    使用 Web 服务对我的应用程序进行身份验证 自定义登录视图控制器 自动切换到 CustomMenuViewController 立即点击触发到 CustomSubMenuViewController 的 segue 点击后退按钮触发弹窗 等待网络服务远程超时 点击触发到同一个 CustomSubMenuViewController 的 segue

我的问题是:为什么当我第二次加载 ViewController 时,self.navigationController 是否返回 null?

上例中的调用堆栈应如下所示: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController

谢谢

更新: 在这个问题上仍然没有任何进展!

【问题讨论】:

您是否排除了***.com/a/7767160/1445366 和***.com/q/1983620/1445366 中描述的任何原因? 是的 - self.navigationController 在第一次加载 viewController 时是可访问的,只有当您离开它然后尝试连续返回时它才为 null。 确保在 ViewDidDisappear 或 ViewdidUnload 中没有将其设为 null @Navi 感谢您的评论。在这两种方法中,我都没有将其设为 null。 所以你没有在代码中的任何地方使用 self.navigationcontroller=nil? 【参考方案1】:

嘿,这听起来很简单,但是,您是否正确分配了 Navbar 对象,也许您可​​以尝试将其属性设置为 strong。也许这样它就会在时间之前被释放。

【讨论】:

【参考方案2】:

我想你可能已经解决了这个问题,但我遇到了完全相同的事情。我认为我们可能会做同样的事情,比如使用 facebook 登录。无论如何,对于将来的其他人来说,这可能会有用。我遇到的问题是,当我在失败条件下从后台返回时,我再次重新分配 UINavigationController。

因此,您可以尝试在为 UiNavigationController 初始化 rootViewController 的位置周围放置一个断点。

 [[UINavigationController alloc]
        initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it.

【讨论】:

以上是关于self.navigationController 第二次加载 ViewController 时为零的主要内容,如果未能解决你的问题,请参考以下文章

self.navigationController.tabBarController.selectedIndex 不起作用

self.navigationController 在 swift 中为零

self.navigationController 分配为 RootViewController 后为空?

iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?

Objective-C:使用 self.navigationController 和自定义 UINavigationController

使用 self.navigationController.hidesBarsOnSwipe = true 隐藏导航栏,将其永久隐藏