在导航堆栈中重新创建viewController

时间:2013-08-11 12:34:06

标签: ios objective-c cocoa-touch uinavigationcontroller

我有一些我想解决的问题:

我有UIViewController加载。在某种情况下,我选择在导航堆栈中在其上显示新的UIViewController。在那之后,我想将之前的UIViewController留在堆栈中,但我想要排序release它,所以当顶级VC弹出到第一个时,我会发现它不符合条件我离开了它,但好像只是推了它。

尽管如此,我知道我可能只想将它推到第二个VC之上,但这会在导航堆栈中造成混乱,并且可能会造成内存泄漏,因为这种行为可能会被循环。

我正在使用ARC并为iOS 6及更高版本构建应用程序。

2 个答案:

答案 0 :(得分:1)

我认为你有两个选择:

    如果弹出第二个视图控制器,则在第一个视图控制器中调用
  1. viewWillAppear 导航堆栈,因此您可以重置第一个视图的所有状态和UI元素 那种方法中的控制器。
  2. 在弹出第二个视图控制器之前,您可以使用setViewControllers:animated:的{​​{1}}方法将替换第一个视图控制器实例与导航堆栈中的新实例。
  3. 因此,这取决于您是要保留第一个视图控制器实例还是只是“重置”它,或者如果您想要返回时第一个视图控制器的“新鲜”实例 从第二个。

答案 1 :(得分:0)

我建议您将第二个VC的通知发送到第一个VC,并告诉它卸载一个视图,然后手动加载它:

第二个VC:

- (void)viewWillAppear{
   [[NSNotificationCenter defaultCenter]
   postNotificationName:@"unloadVC" object:nil];
}

第一次VC

- (void)viewDidLoad{
  [[NSNotificationCenter defaultCenter]addObserver:self 
                                          selector:@selector(unloadVC:) 
                                              name:@"unloadVC" 
                                            object:nil];
}

- (IBAction)unloadVC:(id)sender{
self.view = nil;

[self viewDidLoad];
}

但代码未经过测试。