错误当尝试按钮上显示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; 

    } 

} 

任何帮助?

+0

看起来您的'finish'方法在您的StartViewController未显示时被调用。 – algrid

你在哪里添加计时器?您应该将其添加到的viewDidAppear中,并在viewWillDissapear中将其无效。而且不要忘了在主线程中运行performSegue

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self performSegueWithIdentifier:@"segue_finished" sender:self]; 
}); 

我有同样的这个问题时,我却意外地呈现了同样的看法控制器的两倍。

检查停止定时器时是否不调用(停止)功能。