错误当尝试按钮上显示ViewController点击但不是方法消防
问题描述:
我有一个StartViewController
与segue设置为FinishViewController
。错误当尝试按钮上显示ViewController点击但不是方法消防
StartViewController
有一个按钮和定时器。如果定时器耗尽,则调用方法finish
。但用户可以点击停止按钮移动到FinishViewController
;
如果用户点击按钮stop
,FinishViewController
被加载。
如果定时器调用finish
方法我得到的错误:
Warning: Attempt to present < FinishViewController: 0x7c15a1d0> on < StartViewController: 0x7c252d20> whose view is not in the window hierarchy!
我不明白为什么。代码字面上是相同的。
这是代码。
- (IBAction)stop:(id)sender {
[timer invalidate];
timer = nil;
[self performSegueWithIdentifier:@"segue_finished" sender:self];
}
- (void) finish {
[timer invalidate];
timer = nil;
[self performSegueWithIdentifier:@"segue_finished" sender:self];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"prepareForSegue %@", [segue identifier]);
if ([[segue identifier] isEqualToString:@"segue_finished"]) {
NSLog(@"segue to finished. ");
FinishViewController * fvc = (FinishViewController*)segue.destinationViewController;
}
}
任何帮助?
答
你在哪里添加计时器?您应该将其添加到的viewDidAppear
中,并在viewWillDissapear
中将其无效。而且不要忘了在主线程中运行performSegue
:
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"segue_finished" sender:self];
});
答
我有同样的这个问题时,我却意外地呈现了同样的看法控制器的两倍。
检查停止定时器时是否不调用(停止)功能。
看起来您的'finish'方法在您的StartViewController未显示时被调用。 – algrid