0

私はUINavigationControllerに基づいてゲームを設計および構築しました。写真のようにいくつかのViewControllerがあります。RootVCからNewGameを選択すると、プレイする準備が整います。終了後、NextBoardVCの次のボードに移動するように要求しています。10枚のボードの後、NextLevelVCによって次のレベルに進みます。5つのレベルがあります。各レベルには10枚のボードが含まれています。問題は、pushViewControllerメソッドを使用して各ViewControllerをプッシュしていることです。5つのレベルの後、スタックに52のVCがあり、アプリケーションがクラッシュすることがあります。

GameVCには多くのpngといくつかのサウンドが含まれているため、かなり重いです。漏れはありません(Instrumentsによるテスト済み)

申し訳ありませんが、評判がないため、stackoverflowで画像をアップロードできません。

これは画像です: 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

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

4

3 に答える 3

2

特に「ループ」に戻っているポイントで、コントローラーを上に押し上げるのではなく、コントローラーを元に戻してみませんか?

于 2011-07-06T15:34:28.060 に答える
0

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

したがって、新しいレベルをナビゲーションスタックにプッシュするのではなく、そのポイントまでのすべてのView Controllerと新しいレベルを含む配列を作成し、setViewControllers上記の方法を使用して、あるレベルを次のレベルに置き換えることができます。

于 2011-07-06T15:36:11.633 に答える
0

ビューコントローラの階層を正しく管理していません。ダイアグラムが示すように、ナビゲーションコントローラーにループが発生することはありません。

また、ナビゲーションコントローラは、最初に視覚的な階層を管理し、次に論理的な階層を管理する必要があります。たとえば、連絡先アプリでは、グループリストビューが連絡先のリストをプッシュし、連絡先の詳細をプッシュして、いくつかの属性詳細編集ビューの1つをプッシュします。1つのビューを離れるたびに、そのビューをポップして、階層を前のビューに「上」に戻します。最後の契約詳細ビューの上に別の連絡先詳細ビューをプッシュするだけで、ある連絡先詳細ビューから次の連絡先ビューに移動するように構成することはできません。

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

(キー:ここで->はプッシュを意味し、<-はポップを意味します)

新しいゲームの最初のレベルを設定するには、次のようにします。

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

...次に、次のレベルを追加するには、最初に次のようにします。

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

... 取得するため:

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

... その後:

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

...他のすべてのレベルで繰り返します。必要に応じて、それぞれに対して同じことを行うことができますBoardVC

ここでの秘訣は、デフォルトのナビゲーションコントローラートランジションであるスライドトランジションを使用しないことです。この遷移により、ユーザーは次の論理レイアウトを期待するようになります。

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

...これが問題の原因です。代わりに、フェードやトランジションをまとめて非表示にするなど、別のトランジションを使用してください。

ユーザーのナビゲーションに必要のないビューをポップすることで、ビューコントローラースタックがいつでも5ビューコントローラーを超えないようにし、メモリに必要なビューコントローラーは5つだけになります。

于 2011-07-06T19:29:19.253 に答える