繁体   English   中英

有没有一种方法可以避免每次segue之后调用viewDidLoad beeing?

[英]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的返回presentViewControllerdismissViewController 您不为此使用segue; 您只需调用dismissViewController (好的,在iOS 6中,您实际上可以使用segue,但这是一种非常特殊且相当复杂的segue,称为Unwind或Exit segue。)

如果这样做,您将回到原来的视图控制器,该控制器一直坐在那里等待您的返回,并且不会调用viewDidLoad

因此,这是一个很好的问题,因为对viewDidLoad的两次调用向您表明您的体系结构完全错误。

我认为您使用了错误的方法-应该在调用viewDidLoad时调用它-这是通知您视图正在刷新或初始加载。 您要做的是将表初始化代码移到其他地方,或者至少设置一个布尔变量,使其仅被调用一次。 第一次调用viewDidLoad时创建一个包含表数据的对象是否可行,然后检查该对象是否已被调用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM