记一次特别的bug

问题现象

push入某个特定的画页,然后再pop出来,然后再切换不同的tabbaritem就会崩溃,而且没有任何提示,也没法定位崩溃位置,哪怕用了$arg1.

猜测,这种情况坏访问的可能性比较大,至少本来在实际 开发中还没有出过这种情况,一般都会记得比如block、notificationcenter 、代理之类的处理。

操作

开启僵尸对象跟踪

好的,现在已经能定位到画页的方法了。

responseForSelector:

于是,打了个方法断点。奇怪,没有定到位。后面,想了想这个方法,很明显是用于代理调用时,判断代理是否响应这个方法的,至于为什么崩溃,就是因为这个代理已经销毁了,这个时间又去判断这个代理是否响应这个方法,故然出理坏访问了。

解决办法

查找页面内的.delegate = self;类似的代码。

定位到UINavigationController的一个代理。朋友为这什么要用这个代理呢,想实现,这个页面隐藏导航栏,而其他页面不隐藏导航栏。

我给出的解决方案

[self.navigationControoler setNavibarHidden:YES animated:YES];

当然离开这个画页时得

[self.navigationControoler setNavibarHidden:NO animated:YES];

另外的解决方法

在当前页面销毁时,记得把UINavigationController的代理置空

其实一般我们开发时,正确的做法就是,在画页消失或者销毁时就应该把dataSource及delegate还有相关对象全部置空,当然很多时候dataSource及delegate不用置空也没什么事。

举个最长见的例子

就是我们开发时一个控制器里有个tableView,然后当然也得设置其dataSource和delegate为self.这种情况下不用置空。那时因为控制器销毁时,这个tableView了销毁了,所以不存在还通过代理来调用当前控制器。

而朋友那个画页就不一样了,因为委托者为UINavigationController,这种情况就比较特别了,当当前画页销毁时,这个委托者是不会销毁的,所以就算画页销毁了也会被调用代理。

小记

时间: 2024-08-03 23:27:23

记一次特别的bug的相关文章

记用ajax的一个bug

遇到一个bug,IE8,只有第一次功能正确,后面都不生效.我看了一下,确实IE存在问题,调试发现根本不进入后台,于是我猜测是缓存的问题,于是加上cache:false,解决了问题. $.ajax( { url: "ParaSetting/OpenOrCloseParam", data: { Id: id }, cache:false, type: "get", success: function (data) { alert(data); if (data ===

记一次生产的bug

第一个在代码中使用 new SimpleDateFormat("EEEE")来判断周几.在本地测试过程中通过日志打印出来的周几 比如周日对应的是中文汉字"星期日",然后使用判断 if("星期日".equals(weekDay)){   } (其中weekDay是要使用的日期).在本地测试通过后就愉快的上线了. 这是一个发邮件的功能,我把生产上发邮件的时间定在了周六上午10点.到了周六,我就正好去了外地玩,也没有带笔记本.周六上午我就在玩的地方等邮

记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别

现象: 测试提了一个bug,我完全复现不了,但是最吊诡的是在其他人的机器上都可以复现.起初以为是SVN合并后出现的冲突,后来经过对比法排查: step 1: 我本地开两个jetty,一个跑合并之前的版本,一个跑合并之后的版本,数据库.redis配置都一样的,结果一致,由此可以推测应该不是代码的问题. step 2: 我电脑和别人电脑同样的配置.连的一个数据库,同样的代码.同样的数据,得到了两个结果,我这里是正常的,而且除了我其它人都可以复现,我喵了狗.... 我还一度以为是灵异现象....o(╯

记一个很隐蔽的bug

今天,遇到了这样一个问题.这个问题成功的经历了第一轮测试.第二轮测试并成功发布带到线上. 背景 这次测试的内容是一个活动页面,需求的情景是从app内访问链接并进入到这个活动页面,伴随着自动登陆(不需要用户输入用户名和密码,对app的用户登录状态进行获取并进行自动登录). 问题 只有第一次访问活动页面时会返回50x,之后再进入活动页面都不会再返回50x,一切正常. 没能发现问题的原因 因为每天的测试工作要大量的切换hosts,所以很容易出现由于浏览器或app缓存所导致的问题.一般通过刷新.清理缓存

记一次神秘的BUG

int CheckConfig(APPCFG* cfg) { int i; char IndexFile[56]; for(i=0;i<cfg->webnum;i++) { printf("i=%d\n",i); memset(IndexFile,0,sizeof(IndexFile)); sprintf(IndexFile,"%s/%s",cfg->pwebs[i].webpath,cfg->pwebs[i].homepage); if(a

表与表的关系把RD搞乱了,记一个Procedure中的bug

就是6张表的关联查询,写了一个存储过程,使用4层for来处理 bug:最后一个for中,两张表的关联条件少了一个,结果数据多查了. 排查办法:使用dbms_output.printline('');每一个for中加一个 dbms_output.put_line('-3.'||x.name);//把与下层for关联的关键信息打印出来dbms_output.put_line('-2.'||x.name);//把与下层for关联的关键信息打印出来dbms_output.put_line('-1.'||

记一次erlang语言bug导致rabbitmq的队列没有消费者的问题

公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10.集群条件下稳定使用了近一年时间,没什么问题. 为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后,出现问题.现象如下: 在几天时间内,有三个队列出现没有消费者的问题.查看rabbitmq的日志. operation queue.declare caused a channel exception not_found: failed to perform operation on queue '

记一个 Base64 有关的 Bug

本文原计划写两部分内容,第一是记录最近遇到的与 Base64 有关的 Bug,第二是 Base64 编码的原理详解.结果写了一半发现,诶?不复杂的一个事儿怎么也要讲这么长?不利于阅读和理解啊(其实是今天有点懒想去休闲娱乐会儿),所以 Base64 编码的原理详解的部分将在下一篇带来,敬请关注. 0x01 遇到的现象 A 向 B 提供了一个接口,约定接口参数 Base64 编码后传递. 但 A 对 B 传递的参数进行 Base64 解码时报错了: Illegal base64 character

Yii2:记一次尴尬的bug

创建一个文章模块,写完添加动作之后,分配到视图,发现报错: Exception (Not Supported) 'yii\base\NotSupportedException' with message 'Message format 'number' is only supported for integer values. You have to install PHP intl extension to use this feature.' in D:\WAMP\Apache24\htdo