2017-08-29 35 views
1

我有一個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

回答

1

你在哪裏添加計時器?您應該將其添加到的viewDidAppear中,並在viewWillDissapear中將其無效。而且不要忘了在主線程中運行performSegue

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

我有同樣的這個問題時,我卻意外地呈現了同樣的看法控制器的兩倍。

檢查停止定時器時是否不調用(停止)功能。