因此,当发生错误时,我正试图将视图控制器从堆栈中弹出,但似乎它一次性弹出太多。顶部的导航栏会丢失其标题和按钮,但旧的表视图数据仍然可见。我不知道发生了什么......
基本设置是:
以下是代码:
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)
任何人都有这方面的经验吗?
答案 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
推入堆栈。有些事听起来不对劲。