今天在测试过程中,出现了这样一个bug,分别有两种情景:
(前提是:app是基于UINavigationController构建的)
1、从Controller-A中push进来B。在B中点击返回,返回的界面为黑色一片。再做返回操作就crash了。
如图1:
2、从Controller-A中push进入B,此时B中tableview出现错位现象(图2),tableview被navigationbar覆盖了一部分,在B中再push一个C进来。此时只显示了C的navigationbar,但下方的view还是保留为B的view(图3)。再进行返回操作,程序crash。
如图2:
图3:
崩溃后,查看控制台的log,发现这样一句话:
nested push animation can result in corrupted navigation bar
捣弄了好久,也找了资料,还是没办法解决。
后来在Controller-B中的viewdidload打印了navigationcontroller的所有压栈viewcontrollers,发现在B之前多了一个无关的viewcontroller-D,再检查代码。原来在点击A的cell的时候(didSelectRowAtIndexPath)push了一个D,但在storyboard上,对A的点击已经加了一个跳转到B的segue。正是由于同一时间push了两个controller进来,所以就会出现这样的警告以及后面的奇怪错误。
将A中didSelectRowAtIndexPath位置的push代码去掉,再测试。问题完全解决了。
纠缠了半天的bug,原来是一个小失误导致的。
由于整个项目是两个人一起做的,相互没沟通好或者没仔细了解好结构就盲目写代码,最终只会花费大量时间在debug上。此次教训须谨记啊。
本文探讨了在使用UINavigationController构建的应用中遇到的两个bug:一是从一个控制器推入另一个控制器后返回时界面变为黑色并导致程序崩溃;二是tableview出现错位现象并被导航栏覆盖。通过深入分析,发现原因在于同一时间推入了两个控制器。通过移除不必要的控制器推送代码,成功解决了问题。文章强调了团队沟通与代码审查的重要性。
475

被折叠的 条评论
为什么被折叠?



