self.navigationController是nil第二次加载ViewController

时间:2013-07-10 16:27:22

标签: ios objective-c ios6 uiviewcontroller uinavigationcontroller

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

UINavigationController *navController = self.navigationController;

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

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

  1. 使用Login ViewController上的webservice验证我的应用程序
  2. 自动触发segue到CustomMenuViewController
  3. 等待webservice远程超时
  4. 单击以触发segue到CustomSubMenuViewController
  5. 现在,如果我执行以下步骤,则会触发上述代码块中的else子句,因为某些原因导航设备未正确设置:

    1. 使用网络服务验证我的应用 CustomLoginViewController
    2. 自动转到CustomMenuViewController
    3. 立即点击以触发segue到CustomSubMenuViewController
    4. 点击后退按钮以触发弹出
    5. 等待webservice远程超时
    6. 单击以触发相同CustomSubMenuViewController
    7. 的segue

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

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

      由于

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我想你可能已经解决了这个问题,但我遇到了同样的事情。而且我认为我们可能会像使用Facebook登录一样完全一样。无论如何,对于未来的其他人来说,这可能是有用的。我遇到的问题是在故障情况下从后台返回时再次重新分配UINavigationController。

所以你可以做的是尝试在初始化uiNavigationController的rootViewController的地方放置一个断点。

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