iOS UITableView崩溃bug解析

1.崩溃bug之UITableView+FDTemplateLayoutCell:

      最近在项目开发中,在使用UITableView时,程序直接崩溃。当然项目中,使用到 UITableView+FDTemplateLayoutCell来缓存tableView高度。(git地址:FDtemplateLayoutCell地址)。崩溃日志如下:

图片1

FDTemplateLayoutCell崩溃信息位置:

图2

当看到这个日志后,立马就知道是因为XYBugTableCell没有注册上才导致崩溃的,于是就查找在加载VC的时候 到底有没有注册Cell。

图3

发现cell也注册了。再看下cell注册也没有问题的。但是为啥就会崩溃呢。于是开始查找原因。首先,难道是FDTemplateLayoutCell库的问题?为了验证这个问题,先不用这个库,直接在返回高度固定高度。

图4

发现直接返回固定高度,程序一切运行OK。这样看来真的是这个库有问题了呢。oh my god,我怎么有点不相信了呢。在项目中,其他的地方也用到这个呢,都没有问题。于是,找一个正常运行的VC来作对比。两个VC中,tableView写法一样的,但唯独一点不同的是:

图5

可以看出,唯一不同的是,设置tableFooterView的位置。于是,像上图一样,改下设置tableFooterView的位置来验证下。果然,程序神一般的运行成功了。好奇怪,为啥会有这种结果呢?难道是偶然事件?于是,在重新设置到原来的位置,程序还是崩溃。反复验证几次,真的是设置tableFooterView的位置不当,而造成的程序崩溃,并不是FDTemplateLayoutCell的原因。

虽然崩溃解决了,但是原因在哪里呢?当给tableView设置tableFooterView的发生了什么?于是,来打断点测试下。在tableView的UITableViewDelegate,UITableViewDataSource代理中,打上断点,如下:

图6

运行程序,正常走到23断点处,继续放开23断点。此时,会发现程序不会直接走25断点,而是走31、35、39断点,也是tableView的代理方法。这一点说明,在设置tableFooterView的时候,系统会自动调用reload方法,去刷新tableView。因此,当走到39断点时,FDTemplateLayoutCell会去根据标识符获取cell,而此刻还没有走到25断点处,所以tableView的cell还没有注册上,此刻去获取cell,就会报错,导致程序的崩溃。

解决方案:先注册cell,在设置tableFooterView。

2.崩溃bug之xib(estimatedRowHeight):

       相信现在好多开发者都用xib开发,但是有时候xib开发遇到的bug,真的让人无从下手。主要还没有崩溃日志。在项目开发中,就遇到这么一个问题。在xib中,直接添加一个tableView,拉属性等等操作。然后运行程序,一切OK(此刻是iOS11系统)。说明在iOS11系统下,没有问题。然后切换到iOS10系统,运行程序,发现直接崩溃,崩溃日志如下:

图7

直接崩溃到main函数里。控制台也没有崩溃信息。难道xib加载tableView和系统有关?在切换到iOS11系统,依旧没有问题。有点郁闷。于是,用纯代码写tableView的初始化来验证下。发现不论在iOS10 还是iOS11系统,都没有问题,运行一切OK。这就奇怪了,看来真的是xib初始化tableView的问题。

   调试工程,返回到初始xib加载tableView的状态,iOS11不用验证了,直接在iOS10系统下,运行,依旧崩溃。难道是xib加载tableView的时候都默认设置了什么吗?于是在xib中,查看tableView的一些设置,发现一个问题:

图8

在xib 加载tableView的时候,会默认选中estimatedRowHeight,如上图(图8)。会不会是这两个默认设置的原因?于是,取消默认选中。然后运行程序(iOS11和iOS10系统),居然程序运行正常,没一点毛病。在勾选上,运行程序崩溃。看来真的是它的原因造成的。但是为啥系统默认的在iOS10会崩溃呢?按道理来说 不应该的呢。难道是工程里面有别的设置导致的?

     为了探讨这个问题,又重新创建一个全新的工程,就初始化一个xib和tableView。所有xib设置和上面工程一样,然后运行程序,发现程序运行居然正常!!!(iOS11、iOS10系统)都OK。这说明xib上tableView默认勾选也没有问题呀。那么问题究竟出在什么地方?

     在项目中,默认选中estimatedRowHeight在iOS10系统下 就会崩溃,是不是在工程里面也设置这个属性,导致冲突的?果不其然,为适配iPhone X时,在项目中加入了如下代码:

图9

     为啥加入这几行代码就会崩溃?看下苹果怎么定义的吧。

图10

是不是瞬间明白了。因此,在iOS11 系统下,程序没有崩溃。在iOS10系统下,由于设置了全局的tableView的estimatedRowHeight属性,而导致程序崩溃。

解决方案:注释掉图9的代码,或者加个判断,只在iOS11下面设置。或者取消图8xib系统默认勾选。

如有问题,欢迎指正。Demo地址:测试Demo 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 与焦虑抗争许久,我尝试了很多种方法,想着如何摆脱焦虑。 有一个很疯狂的日本家庭主妇,她几乎把家里所有的东西都扔掉了...
    夏潇潇雨歇阅读 333评论 0 1
  • 文/墨安泊 我并不懂茶,只是喝茶,就像有人喝咖啡,有人喝可乐一样,我,喝茶。 在办公室,每天喝茶,上午一杯,下午一...
    墨安泊阅读 515评论 6 8
  • 13年的时候做了很多荒谬的事情现在想起来其实是后悔的可是后悔有什么用都是我的选择我的经历 现在遇见我的对先生很包容...
    放牛的小孩阅读 168评论 0 0