我在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。
答案 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中展示新的控制器: