我在我的主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,但我想保留我的所有数据和表我在开始时初始化..
任何解决方案?非常感谢你!
答案 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时,是否可以创建一个包含表数据的对象,然后检查它是否已被调用?