0

iPadやiPhone用のアプリケーションを開発しているときに、ひどく厄介な問題が発生しました。

ナビゲーションコントローラー(ストーリーボードで設定)に、詳細情報を表示するビューコントローラーをプッシュさせたい。

次のコードはかつては機能していましたが、iPhoneでコントローラーを押すと画面が真っ暗になり、iPadでもまったく同じコードが正常に機能します。使用されるすべてのコントローラーはnil以外の値です。何が起こるかというと、navigationControllerを使用してビューを変更するための通常のアニメーションが表示されますが、その後は黒い画面しか表示されません。

ADetailViewController* detailController =
    [self.storyboard instantiateViewControllerWithIdentifier:@"ADetailViewController"];
    exposeController.data = aRealEstate;
    exposeController.appData = self.appData;
    [self.navigationController pushViewController: detailController animated:YES];

コードを少しデバッグして、ADetailViewControllerクラスのviewDidLoadが呼び出されているのに、viewDidAppearが呼び出されていないことに気付きました。これは、詳細ビューが表示されていることを意味します(黒い画面からもわかりました:-))

この問題に関するヒントをいただければ幸いです。

アップデート

私はなんとか自分で問題を解決することができました。これの原因は、デリゲート依存関係に組み込んだ循環依存関係でした。これは、rootViewが非表示になるときに、プッシュされたビューをポップするために使用されていました。

4

2 に答える 2

1

ストーリーボードを使用しているので、セグエを使用しないのはなぜですか?

ビュー コントローラのすべてのインスタンス化は、セグエを実行することによって処理されます。ですべてのカスタマイズを便利に行うことができますprepareForSegue:

あなたのエラーは、iPhone と iPad のストーリーボードの構成が異なることが原因だと思います。セグエを使用すると、View Controller をプッシュするプロセスがより透過的になり、問題をより簡単に見つけることができます。

于 2013-01-21T12:38:21.357 に答える
0

2 つの提案があります。

  1. プロジェクトのクリーニングを試みましたか?
  2. ADetailViewController識別子が ではない可能性があります。おそらく、識別子がUIViewControlleriPhone のストーリーボードの間違ったフィールドに格納されていることが原因です。

幸運を

于 2013-01-21T12:41:48.083 に答える