[英]viewDidLoad is in fact called every time there is a segue transition
[英]Is there a way to avoid viewDidLoad beeing called after every segue?
我在主ViewController中初始化表,数据等。 对于更多设置,我想调用另一个Viewcontroller:
DateChangeController *theController = [self.storyboard instantiateViewControllerWithIdentifier:@"dateChangeController"];
[self presentViewController:theController animated:YES completion:^{NSLog(@"View controller presented.");}];
某些点击之后,我会返回segue(自定义:)
NSLog(@"Scroll to Ticket");
[self.sourceViewController presentModalViewController:self.destinationViewController animated:YES];
我的问题:
返回主ViewController之后,(每次)都会调用viewDidLoad。我读到,ARC在“转到”另一个ViewController并调用viewDidUnload方法后释放了mainView,但我想保留所有我初始化的数据和表开始
有什么办法吗? 非常感谢你!
问题是您正在执行此操作:
main view controller ->
date change controller ->
a *different* main view controller
换句话说,尽管在口头描述中使用了“ returning to my main ViewController”一词,但实际上您并没有返回 ; 您每次都移至该主视图控制器的另一个实例,将所有这些视图控制器相互叠加。
返回到现有视图控制器的方法不是进行选择而是返回! presentViewController
的返回presentViewController
是dismissViewController
。 您不为此使用segue; 您只需调用dismissViewController
。 (好的,在iOS 6中,您实际上可以使用segue,但这是一种非常特殊且相当复杂的segue,称为Unwind或Exit segue。)
如果这样做,您将回到原来的视图控制器,该控制器一直坐在那里等待您的返回,并且不会调用viewDidLoad
。
因此,这是一个很好的问题,因为对viewDidLoad
的两次调用向您表明您的体系结构完全错误。
我认为您使用了错误的方法-应该在调用viewDidLoad时调用它-这是通知您视图正在刷新或初始加载。 您要做的是将表初始化代码移到其他地方,或者至少设置一个布尔变量,使其仅被调用一次。 第一次调用viewDidLoad时创建一个包含表数据的对象是否可行,然后检查该对象是否已被调用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.