今天在测试过程中,出现了这样一个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上。此次教训须谨记啊。