0

viewDidLoad: で self.navigationController にアクセスする UIViewController サブクラスがあります。ビュー スタックのどこにあるかに応じて、navigationController を取得するか、nil を取得します。

スタックが「RootViewController -> MyViewController」の場合、有効なポインターを取得します。

私のスタックが「RootViewController -> AnotherViewController -> MyViewController」の場合、nil になります。

どちらの場合も、MyViewController は次のようにスタックにプッシュされています。

[self.navigationController pushViewController:self.myViewController 
                           animated:YES];

MyViewController の上のスタックに別の ViewController をプッシュできるようにする必要があるため、これで行き詰まりました。最初のケースでは正常に動作しますが、2 番目のケースでは明らかに失敗します。

4

2 に答える 2

0

私が通常行うことは、UIViewController をサブクラス化し、navigationController を設定するメソッドを追加することです。これを読み取り/書き込みとして持たない理由はありません。特に、Apple のクラスが、同じスタックにある場合でも、navigationController (または、さらに言えば、parentController) を設定しないと決定する頻度を考慮すると、そうではありません。

于 2010-08-19T10:10:16.390 に答える
0

私が見ることができるすべてのものから、UIViewController の self.navigationController は、UIViewController が UINavigationController のスタック内に存在する限り、常に適切な UINavigationController を返すように設計されています。これはおそらく、単純なコーディング エラーがより複雑なものになりすましている場合に、私が思っているよりも頻繁に遭遇するように思われるケースの 1 つです。このような場合、私は通常、問題を再現するために必要な最小限のコードを使用してまったく新しい Xcode プロジェクトをセットアップすることに成功し、そのプロセスで見落としていた問題の修正を見つけ、メイン プロジェクトに簡単に適用できることがよくあります。 . ごめんなさい、できません」詳細を提供することはできませんが、あなたが説明していることはCocoa Touchフレームワークの設計に反しているようです.ドキュメントに厳密に従って書かれた最小限のXcodeプロジェクトでそれを再現できる場合は、バグレポートを提出することをお勧めします.アップルと。うまくいけば、見落としていた単純なものを見つけて、数分で自分自身を蹴ることができます =)

于 2009-04-06T04:46:16.680 に答える