有没有办法避免在每个segue之后调用viewDidLoad?

时间:2013-04-23 17:09:19

标签: iphone storyboard segue viewdidload

我在我的主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,但我想保留我的所有数据和表我在开始时初始化..

任何解决方案?非常感谢你!

2 个答案:

答案 0 :(得分:5)

问题是你这样做:

main view controller ->
    date change controller ->
        a *different* main view controller

换句话说,虽然在你的口头描述中使用了“返回我的主ViewController”这个词,但你实际上并没有返回;你每次都要向这个主视图控制器的另一个实例前进,将所有这些视图控制器堆叠在一起。

返回现有视图控制器的方法不是制作segue而是返回! presentViewController的回复是dismissViewController。你没有使用segue;你只需致电dismissViewController。 (好吧,在iOS 6中你可以实际上使用了一个segue,但它是一种非常特殊且相当复杂的segue,称为Unwind或Exit segue。)

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

所以,这对你来说是一个很好的问题,因为viewDidLoad的双重调用表明你的架构是错的。

答案 1 :(得分:0)

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