2

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

有什么解决办法吗?非常感谢你!

4

2 回答 2

5

问题是你正在这样做:

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

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

返回现有视图控制器的方法不是进行segue,而是返回!的回报presentViewControllerdismissViewController。您不为此使用segue;你只要打电话dismissViewController。(好吧,在 iOS 6中你实际上可以使用 segue,但它是一种非常特殊且相当复杂的 segue,称为 Unwind 或 Exit segue。)

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

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

于 2013-04-23T18:07:41.180 回答
0

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

于 2013-04-23T17:57:08.173 回答