Iphone 导航控制器溢出

Iphone 导航控制器溢出,iphone,ios,navigationcontroller,Iphone,Ios,Navigationcontroller,我设计并制作了基于UINavigationController的游戏。我有几个像图片上那样的视图控制器。您从RootVC选择了NewGame,就可以开始玩了。完成后,您将要求转到下一个Boardvc中的下一个板。在10块板之后,你将通过NextLevelVC进入下一个级别。有5个级别。每层包含10块板。问题是我正在使用pushViewController方法推送每个ViewController。在5个级别之后,我的堆栈上有52个VCs,有时应用程序崩溃 GameVC包含很多png,还有一些声音,

我设计并制作了基于UINavigationController的游戏。我有几个像图片上那样的视图控制器。您从RootVC选择了NewGame,就可以开始玩了。完成后,您将要求转到下一个Boardvc中的下一个板。在10块板之后,你将通过NextLevelVC进入下一个级别。有5个级别。每层包含10块板。问题是我正在使用pushViewController方法推送每个ViewController。在5个级别之后,我的堆栈上有52个VCs,有时应用程序崩溃

GameVC包含很多png,还有一些声音,所以它很重。我没有任何泄漏(通过仪器测试)

对不起,我没有声誉,所以我不能通过stackoverflow上传图像

这是一个图像:

视图层次结构的文本表示:

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

是否有更好的方法进行导航并消除崩溃?

为什么不直接将控制器弹出,而不是将越来越多的控制器推到顶部,尤其是在“循环”中返回的位置?

不要忘记,可以直接在导航堆栈上设置视图控制器,使用
setViewControllers:(NSArray*)已设置动画的viewControllers:(BOOL)已设置动画的


因此,您可以通过创建一个数组,其中包含到该点的所有视图控制器以及新级别,并使用上面的
setViewControllers
方法,将一个级别替换为下一个级别,而不是将新级别推到导航堆栈上。

您管理视图控制器层次结构的方式不正确。导航控制器永远不应该像图表所示的那样有一个循环

此外,导航控制器应首先管理视觉层次结构,然后再管理逻辑层次结构。例如,联系人应用程序,其中组列表视图推送联系人列表,该列表推送联系人详细信息,该联系人详细信息推送多个属性详细信息编辑视图之一。每次离开一个视图时,都会弹出该视图,并将层次结构“向上”返回到上一个视图。只需在上一个合同详细信息视图的顶部推送另一个联系人详细信息视图,就永远不会将其从一个联系人详细信息视图配置为下一个联系人详细信息视图

同样,在按下下一步之前,您需要从堆栈中弹出现有的
BoardVC
LevelVC

(键:此处-->表示推送和
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC
RootVC-->NewGameVC-->GameVC-->BoardVC<--LevelOneVC
RootVC-->NewGameVC-->GameVC-->BoardVC
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelTwoVC
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC-->LevelTwoVC