如何在viewDidLoad中加载视图控制器?

时间:2014-11-17 16:33:58

标签: ios objective-c nsdate

我在viewDidLoad中有以下代码。我想比较我在nsuserdefaults restrictionTime中保存的nsdate。

if ([[NSDate date]timeIntervalSinceDate:[restrictionTime objectForKey:@"time"]] < 86400) {

    ResultsViewController *destinationViewController = [[ResultsViewController alloc]init];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    destinationViewController = [storyboard instantiateViewControllerWithIdentifier:@"results"];

    [self presentViewController:destinationViewController animated:NO completion:^{
    }]; // !!!!! this line 

}

当它到达代码中指定的行时,应用程序会递归地运行viewDidLoad。 我想要做的就是比较现在的时间和我保存的时间NSUserDefaults的。如果它不到一天,那么它将呈现另一个viewController。

*如果我注释掉上面指定的行,它运行正常。

NSLog(@"%f", [[NSDate date]timeIntervalSinceDate:[restrictionTime objectForKey:@"time"]]);

上述NSLog返回2167.23445。

2 个答案:

答案 0 :(得分:0)

如果你的应用程序以递归方式运行viewDidLoad,那表明你通过以下方式再次调用同一个VC:

    destinationViewController = [storyboard instantiateViewControllerWithIdentifier:@"results"];

你能证实这不是故意的吗?我很困惑为什么你可能再次实例化相同的VC。如果这是问题所在,我建议您仔细检查实际情况下实际想要实例化的VC的名称。

答案 1 :(得分:0)

您正在此块中创建两个视图控制器:

// Creating a ResultsViewController
ResultsViewController *destinationViewController = [[ResultsViewController alloc]init];

// Creating (I assume) another ResultsViewController
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
destinationViewController = [storyboard instantiateViewControllerWithIdentifier:@"results"];

你确定你的意思&#34;递归&#34;?或者你的意思是两次?正如其他人所提到的,你应该在-viewDidAppear中展示新的控制器: