self.navigationcontroller推送没有导航项的viewcontroller

时间:2011-04-29 17:54:57

标签: iphone uinavigationcontroller uitabbarcontroller nsurlconnection

我遇到了这个问题的想法。 我有一个UITabbarcontroller和2个带有Navigationcontrollers的标签。

我有一组用于导航的ViewControllers。这些ViewControllers在两个选项卡/导航控制器上的使用顺序相同,但数据略有不同。

上一个ViewController正在进行NSURLConnection,并且在connectionDidFinishLoading中:应该使用以下代码显示最后一个viewcontroller:

[self.navigationController popToRootViewControllerAnimated:NO];
[self.navigationController pushViewController:lastViewController animated:YES];

这将弹出到根视图控制器,但永远不会推送最后一个ViewController。 (旁注:这实际上已经工作了一段时间,但是在使用第二个标签栏的导航控制器时也停止了工作)。

此外,如果我注释掉第一行:

//[self.navigationController popToRootViewControllerAnimated:NO];
[self.navigationController pushViewController:lastViewController animated:YES];

显示了最后一个viewcontroller,但是错过了导航栏中的后退按钮,并且没有禁用它。 我怀疑self.navigationcontroller不知何故返回错误的navigationcontroller。这就好像导航控制器“忘记了”视图控制器堆栈一样。

  1. 这可能与connectionDidFinishLoading有关:是一个不同的线程吗?
  2. 有人建议如何以不同的方式获取“此选项卡中的导航控制器”吗?
  3. 我上下三次检查代码,我找不到任何东西。在这个之前的其他视图控制器被推送和弹出没有任何问题。

    感谢您提供任何帮助,我感到困惑!

1 个答案:

答案 0 :(得分:0)

你说的话给了我一个主意。我认为self.navigationController在被推后可能被设置为nil,因此,当你按下新的视图控制器时它不会被设置。这样做解决了这个问题! :)

UINavigationController *navigationController = self.navigationController;
[navigationController popToRootViewControllerAnimated:NO];
[navigationController pushViewController:lastViewController animated:YES];