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 隐藏导航栏,将其永久隐藏