3

ストーリーボードを使用して、MainMenuViewController は Number1ViewController を次のようにモーダルに提示します。

-(void) goToNumbers {

    [self performSegueWithIdentifier: @"seguetonumbers" sender: self];

}

次に、Number1ViewController は Number2ViewController を次のように表示します。

-(void)nextLevel {

     [self performSegueWithIdentifier: @"segueToLevel2" sender: self];
}

Xcodeはこの警告を生成します。

2013-01-23 12:09:49.873 ToddlerTeacherMini[7574:907] Warning: Attempt to present <Number2ViewController: 0x1fddc720> on <Number1ViewController: 0x1fdc7380> whose view is not in the window hierarchy!

この警告についてオンラインで見たものはすべて、別の VC の viewDidLoad メソッドで VC を提示することはできず、コードを viewWillAppear メソッドに移動するとこれが修正されると書かれています。このセグエを viewDidLoad から呼び出すのではなく、後で呼び出すので、なぜこれが起こっているのかわかりません。

アプリの他の場所でも同様に VC を問題なく表示していますが、ここで何が違うのかわかりません。何か助けはありますか?

明確にするために、私のアプリではすべてが期待どおりに機能しているように見えますが、このメッセージを無視したくないだけで、戻ってきて後で噛まれてしまいます.


Todd Kerpelman の提案に従って、nextLevel メソッドが呼び出された場所を調べました。ブレークポイントはあまり教えてくれませんでしたが、NSLog をもう少し掘り下げると、次のようになりました。

-(void)nextLevel {


    if (nextLevelHasNotBeenCalled == 0){

       [self performSegueWithIdentifier: @"segueToLevel2" sender: self];
        NSLog(@"Segue was called here.");

    }

    nextLevelHasNotBeenCalled ++;
    NSLog(@"Next level has been called %i times!", nextLevelHasNotBeenCalled);


}

ログ:

2013-01-26 02:04:12.579 ToddlerTeacherMini[9203:907] Segue was called here.
2013-01-26 02:04:12.593 ToddlerTeacherMini[9203:907] Next level has been called 1 times!
2013-01-26 02:04:14.789 ToddlerTeacherMini[9203:907] Next level has been called 2 times!

nextLevel が 2 回呼び出され、それが問題の原因であることは明らかです。

4

1 に答える 1

2

nextLevelこれは、コードが予期しないときに誤って呼び出した場合のように思えます。(おそらく、Number1ViewController のメソッドで無関係なメソッドが呼び出された場合の副作用としてviewDidLoad。)

メソッドにブレークポイントを追加して、nextLevelどのように/どこで呼び出されるかを確認しましたか? これは、少なくともこの可能性を確認 (または排除) するための最良の方法です。

于 2013-01-23T18:58:24.923 に答える