2011-07-06 9 views
0

私はUINavigationControllerに基づいてゲームを設計して構築しました。私は画像のようないくつかのViewControllerを持っています。 RootVCからNewGameを選択すると、再生準備が整いました。終了後、NextBoardVCの次のボードに行くように求めています。 10枚のボードの後に​​NextLevelVCで次のレベルに進んでいます。 5つのレベルがあります。各レベルには10枚のボードが含まれます。問題は、pushViewControllerメソッドを使用して各ViewControllerをプッシュすることです。 5レベル後、スタックに52のVCがあり、アプリケーションがクラッシュすることがあります。それはかなり重いですのでNavigationControllerオーバーフロー

GameVCは、多くのpngの、およびいくつかの音が含まれています。私はstackoverflowのことで画像をアップロード傾けるような評判を持っていけない、

申し訳ありませんが(Instruments社調べ)任意のリークを持っていません。ビュー階層のhttp://imageshack.us/photo/my-images/641/navigationg.jpg/

テキスト表現:

RootVC 
--OptionsVC 
--HowToPlayVC 
--NewGameVC 
    --GameVC 
    --NextBoardVC 
     --NextLevelVC 
     --GameVC 
      --NextBoardVC 
       --NextLevelVC 
       --GameVC 
        --NextBoardVC 
        --NextLevelVC 
         --GameVC 
         --... and so on many times 

ナビゲーションを行うと、クラッシュを排除するためのより良い方法はあり

これはイメージですか?

答えて

2

は、なぜあなたはただ単に、特にあなたがあなたの「ループ」に戻っているこれらの点で、上に、より多くのコントローラをプッシュするのではなく、バックオフのコントローラをポップませんか?

0

setViewControllers:(NSArray *)viewControllers animated:(BOOL)animatedを使用して、あなたは直接のナビゲーションスタックにView Controllerを設定できることを忘れないでください。

新しいレベルをナビゲーションスタックにプッシュするのではなく、そのレベルまでのすべてのビューコントローラと新しいレベルを含む配列を作成し、上のsetViewControllersメソッドを使用して、あるレベルを次のレベルに置き換えることができます。

0

あなたは間違ってあなたのビューコントローラの階層を管理しています。あなたのダイアグラムがあなたの提案しているように、ナビゲーションコントローラは決してループを持つべきではありません。

また、ナビゲーションコントローラでは、ビジュアルの階層を最初に管理し、論理1秒を管理する必要があります。例えば。グループのリストビューが連絡先の詳細をプッシュする連絡先のリストをプッシュする連絡先アプリでは、複数の属性の詳細編集ビューの1つをプッシュします。 1つのビューを終了するたびに、そのビューをポップし、階層を前のビューに戻します。最後の契約詳細ビューの上にある別の連絡先詳細ビューを押すだけで、1つの連絡先詳細ビューから次の連絡先ビューに移動するよう設定することはありません。

同様に、次のものを押す前に、既存のBoardVCまたはLevelVCをスタックからポップする必要があります。その後、

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC 

...とまで:

あなたが希望新しいゲームの最初のレベルAをセットアップするには:(ポップを意味し、ここで - - >プッシュを意味し、<キー)

次のレベルを最初に追加してください:

RootVC-->NewGameVC-->GameVC-->BoardVC<--LevelOneVC 

...取得するには:

RootVC-->NewGameVC-->GameVC-->BoardVC 

...そして:

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelTwoVC 

を...他のすべてのレベルのために繰り返します。必要に応じて、BoardVCごとに同じ操作を行うことができます。

ここでのトリックは、デフォルトのナビゲーションコントローラのトランジションであるスライドトランジションを使用しないことです。

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC-->LevelTwoVC 

...あなたの問題を引き起こしているものである:それ移行は、この論理的なレイアウトを期待するユーザーに指示します。代わりに、フェードのような別のトランジションを使用するか、トランジションをすべて一緒に隠します。

ユーザのナビゲーションに必要でないビューをポップすると、コントローラスタックが誰にでも深くない5つのビューコントローラしか表示されないことが保証され、メモリには5つのビューコントローラしか必要ありません。

関連する問題