【发布时间】: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
谢谢
更新: 在这个问题上仍然没有任何进展!
【问题讨论】:
-
您是否排除了stackoverflow.com/a/7767160/1445366 和stackoverflow.com/q/1983620/1445366 中描述的任何原因?
-
是的 - self.navigationController 在第一次加载 viewController 时是可访问的,只有当您离开它然后尝试连续返回时它才为 null。
-
确保在 ViewDidDisappear 或 ViewdidUnload 中没有将其设为 null
-
@Navi 感谢您的评论。在这两种方法中,我都没有将其设为 null。
-
所以你没有在代码中的任何地方使用 self.navigationcontroller=nil?
标签: ios objective-c ios6 uiviewcontroller uinavigationcontroller