iphone - 有没有办法避免每次segue后调用viewDidLoad?

标签 iphone storyboard segue viewdidload

我在主视图 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/

相关文章:

iphone - CGRect 在动画期间不改变

iphone - iOS Storyboard 连接松动?

xcode - 将数据从文本字段传递到下一个 View

objective-c - UISplitViewController - 通过 Storyboard segues 的多个详细 View Controller

ios - 在 UIAlertView 中按下按钮后继续

c++ - Direct3D 和 iPhone 加速度计矩阵

iphone - 如何创建从右到左的 UITableView?

iphone - 为什么我的电影不能使用 MPMoviePlayerController 播放?

ios - 如何分发 Storyboard View ?

ios - 如何获取已经实例化的UIViewController?