2017-08-29 8 views
1

StartViewControllerのセグが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

StartViewControllerが表示されていないときに、あなたの 'finish'メソッドが呼び出されたようです。 – algrid

答えて

1

どこにタイマーを追加しましたか? viewDidAppearStartViewControllerを追加し、viewWillDissapearに無効にしてください。そして、メインスレッドでperformSegueを実行することを忘れないでください:

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

私が誤って二度同じビューコントローラを提示されたときと同じに、この問題を持っていました。

タイマーを停止するときに、(停止)機能を呼び出さないことを確認します。

関連する問題