首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationController溢出

NavigationController溢出
EN

Stack Overflow用户
提问于 2011-07-06 15:26:48
回答 3查看 158关注 0票数 0

我设计并构建了基于UINavigationController的游戏。我在照片上有几个类似的ViewControllers。您从NewGame中选择RootVC,就可以开始播放了。完成后,你要求去下一个董事会在NextBoardVC。经过10个董事会,你将进入下一个水平的NextLevelVC。有5个层次。每个级别有10个董事会。问题是,我正在使用ViewController方法推送每个pushViewController。在5级之后,我在堆栈上有52个VC,有时应用程序崩溃。

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

对不起,我没有声誉,所以我不能上传图片堆叠溢出。

这是一张图片:

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

代码语言:javascript
复制
RootVC 
--OptionsVC
--HowToPlayVC
--NewGameVC
  --GameVC
    --NextBoardVC
      --NextLevelVC
        --GameVC
          --NextBoardVC
              --NextLevelVC
                --GameVC
                  --NextBoardVC
                    --NextLevelVC
                      --GameVC
                        --... and so on many times

有更好的方法来进行导航,并消除崩溃吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-06 15:34:28

为什么你不干脆把控制器放回去,而不是把越来越多的控制器推到上面,特别是在你返回“循环”的时候?

票数 2
EN

Stack Overflow用户

发布于 2011-07-06 15:36:11

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

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

票数 0
EN

Stack Overflow用户

发布于 2011-07-06 19:29:19

您正在错误地管理视图控制器层次结构。导航控制器不应该像图所示的那样有一个循环。

此外,导航控制器应该首先管理可视层次结构,并管理逻辑一秒。例如,联系人应用程序,其中一个组列表视图推送了一个联系人列表,该列表推送了一个联系人详细信息,它推动了几个属性细节编辑视图中的一个。每次离开一个视图时,都会弹出该视图,并将层次结构“向上”返回到前一个视图。您永远不会将它从一个联系人详细信息视图配置到下一个联系人视图,只需将另一个联系人详细信息视图推到最后一个契约详细信息视图之上。

同样,在推送下一个堆栈之前,您需要从堆栈中弹出现有的BoardVCLevelVC

(键:此处->表示推,<--表示pop)

要设置新游戏的第一级,您可以:

代码语言:javascript
复制
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC

..。然后,要添加下一个级别,首先:

代码语言:javascript
复制
RootVC-->NewGameVC-->GameVC-->BoardVC<--LevelOneVC

..。得到:

代码语言:javascript
复制
RootVC-->NewGameVC-->GameVC-->BoardVC

..。然后:

代码语言:javascript
复制
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelTwoVC

..。对所有其他级别重复。您可以根据需要对每个BoardVC执行相同的操作。

这里的诀窍是不要使用幻灯片转换,这是默认的导航控制器转换。该转换告诉用户希望得到这样的逻辑布局:

代码语言:javascript
复制
RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC-->LevelTwoVC

..。这就是导致你的问题的原因。相反,使用另一个转换,如淡出或隐藏所有的过渡在一起。

通过弹出用户导航所不需要的任何视图,您可以确保视图控制器堆栈在任何时候都不会超过5个视图控制器,因此内存中只需要5个视图控制器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6598948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档