UINavigationController popViewController正在弹出一切!

时间:2009-09-22 10:13:40

标签: iphone cocoa-touch uikit uinavigationcontroller

因此,当发生错误时,我正试图将视图控制器从堆栈中弹出,但似乎它一次性弹出太多。顶部的导航栏会丢失其标题和按钮,但旧的表视图数据仍然可见。我不知道发生了什么......

基本设置是:

  • 标签视图模板
    • 导航控制器
      • 查看控制器(从xib加载)
      • 查看控制器(推送,我要弹出的内容)

以下是代码:

NSLog(@"%@", [[self navigationController] viewControllers]);
[[self navigationController] popViewControllerAnimated:NO];
NSLog(@"%@", [[self navigationController] viewControllers]);

由此产生的NSLog节目:

2009-09-22 19:57:14.115 App[34707:550b] (
    <MyViewController: 0xd38a70>,
    <MyViewController: 0xd36b50>
)
2009-09-22 19:57:14.115 App[34707:550b] (null)

任何人都有这方面的经验吗?

4 个答案:

答案 0 :(得分:4)

我只是使用

看到一些奇怪的UINavigationController堆栈行为
[self.navigationController popViewControllerAnimated:YES];

来自tableView:didSelectRowAtIndexPath:来电的代表内部。

视图无法正常工作,UINavigationController提供的“后退”操作无法正确弹出此委托的视图,返回另一个级别。

我发现如果我用

[self.navigationController popToViewController:self animated:YES];
相反,突然一切都运转良好。这是在启用ARC的应用程序中 所以,我只能猜测有一些参考内务管理不会正确发生,除非你告诉它弹出一个特定的视图控制器,当你弹出一个视图控制器,它将立即被那个流行音乐“未引用”。

答案 1 :(得分:1)

[[self navigationController] popViewControllerAnimated:NO];
//here you pop **self** from navigation controller. And now 
[self navigationController] == nil;   
// And 
[nil viewControllers] == nil

尝试这样做:

UINavigationController *nc = [self navigationController];
NSLog(@"%@", [nc viewControllers]);
[nc popViewControllerAnimated:NO];
NSLog(@"%@", [nc viewControllers]);

答案 2 :(得分:1)

我修好了。弹出视图的代码在viewDidLoad中被调用。这意味着它在视图实际完全动画之前会弹出。

我将该代码移至viewDidAppear,现在它的工作方式与宣传的一样。

答案 3 :(得分:0)

有什么问题?

[self.navigationController popViewControllerAnimated:NO];

此外,您可能想要检查如何将ViewController推入堆栈。有些事听起来不对劲。