はい、失敗大王です。まだまだ、失敗しますよ。
今回は、NSNotificationCenterが動かなくなるという悲しい出来事に遭遇しました。しかも、一つ前のViewControllerに戻った時だけ。
一つ前のViewControllerに戻る方法は、2つあるのかな。
【dismissViewControllerAnimated:completion:】で戻るか、
それとも、Unwind Segue を使って
【performSegueWithIdentifier:sender:】で戻るか。
今回は、ゲームを結果画面から ゲームを Retry できるようにしようとして、
【dismissViewControllerAnimated:completion:】を使ったら、色々初期化できないくて、ゲームが終了したところに戻ってしまったので
【performSegueWithIdentifier:sender:】で対処することにしました。
そうすると、ゲーム中に使っている NSNotificationCenter が動かないでございます。で、さまようことしばし、大量に吐出された NSLog の中に 【Warning: Attempt to dismiss from view controller
たぶん、dismiss 中に dismiss するなよと怒られているに違いない。
で、ソースを見ると
1 2 3 4 5 |
-(void)retry { [self dismissViewControllerAnimated:YES completion:nil]; [[NSNotificationCenter defaultCenter] removeObserver: self]; [self performSegueWithIdentifier:@"resultToGame" sender:self]; } |
と、なってました。うぎゃぁーーーーーー
ということで、【dismissViewControllerAnimated:completion:】をバッサリ消して修正完了。
1 2 3 4 |
-(void)retry { [[NSNotificationCenter defaultCenter] removeObserver: self]; [self performSegueWithIdentifier:@"resultToGame" sender:self]; } |
無事、NSNotificationCenter が動くようになりましたとさ。みなさんもテストコードを書くときは消し忘れがないように気をつけましょう。
おわり
コメント