我有一些我想解决的问题:
我有UIViewController
加载。在某种情况下,我选择在导航堆栈中在其上显示新的UIViewController
。在那之后,我想将之前的UIViewController
留在堆栈中,但我想要排序release
它,所以当顶级VC弹出到第一个时,我会发现它不符合条件我离开了它,但好像只是推了它。
尽管如此,我知道我可能只想将它推到第二个VC之上,但这会在导航堆栈中造成混乱,并且可能会造成内存泄漏,因为这种行为可能会被循环。
我正在使用ARC并为iOS 6及更高版本构建应用程序。
答案 0 :(得分:1)
我认为你有两个选择:
viewWillAppear
导航堆栈,因此您可以重置第一个视图的所有状态和UI元素
那种方法中的控制器。setViewControllers:animated:
的{{1}}方法将替换第一个视图控制器实例与导航堆栈中的新实例。 因此,这取决于您是要保留第一个视图控制器实例还是只是“重置”它,或者如果您想要返回时第一个视图控制器的“新鲜”实例 从第二个。
答案 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];
}
但代码未经过测试。