我在主视图 Controller 中初始化表、数据等。对于更多设置,我想调用另一个 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
换句话说,虽然在你的口头描述中你使用了“返回到我的主 ViewController”这样的词,但你实际上并没有返回;每次你都会前进到这个主视图 Controller 的另一个实例,将所有这些 View Controller 堆叠在一起。
返回现有 View Controller 的方法不是进行segue,而是返回! presentViewController
的返回是 dismissViewController
。你不需要为此使用segue;你只需调用dismissViewController即可。 (好吧,在 iOS 6 中,您实际上可以使用 Segue,但这是一种非常特殊且相当复杂的 Segue,称为 Unwind 或 Exit Segue。)
如果你这样做,你将回到旧的 View Controller ,它一直坐在那里等待你的返回,并且 viewDidLoad
将不会被调用。
所以,这是一个很好的问题,因为 viewDidLoad
的双重调用向您表明您的架构完全错误。
关于iphone - 有没有办法避免每次segue后调用viewDidLoad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16175226/