iOS UITableView崩潰bug解析

1.崩潰bug之UITableView+FDTemplateLayoutCell:

? ? ? 最近在項目開發(fā)中诗鸭,在使用UITableView時溢豆,程序直接崩潰烦粒。當然項目中,使用到?UITableView+FDTemplateLayoutCell來緩存tableView高度始锚。(git地址:FDtemplateLayoutCell地址)刽酱。崩潰日志如下:

圖片1

FDTemplateLayoutCell崩潰信息位置:

圖2

當看到這個日志后,立馬就知道是因為XYBugTableCell沒有注冊上才導致崩潰的瞧捌,于是就查找在加載VC的時候 到底有沒有注冊Cell棵里。

圖3

發(fā)現(xiàn)cell也注冊了。再看下cell注冊也沒有問題的姐呐。但是為啥就會崩潰呢殿怜。于是開始查找原因。首先曙砂,難道是FDTemplateLayoutCell庫的問題头谜?為了驗證這個問題,先不用這個庫鸠澈,直接在返回高度固定高度柱告。

圖4

發(fā)現(xiàn)直接返回固定高度截驮,程序一切運行OK。這樣看來真的是這個庫有問題了呢际度。oh my god葵袭,我怎么有點不相信了呢。在項目中乖菱,其他的地方也用到這個呢坡锡,都沒有問題。于是窒所,找一個正常運行的VC來作對比鹉勒。兩個VC中,tableView寫法一樣的吵取,但唯獨一點不同的是:

圖5

可以看出禽额,唯一不同的是,設(shè)置tableFooterView的位置皮官。于是绵疲,像上圖一樣,改下設(shè)置tableFooterView的位置來驗證下臣疑。果然,程序神一般的運行成功了徙菠。好奇怪讯沈,為啥會有這種結(jié)果呢?難道是偶然事件婿奔?于是缺狠,在重新設(shè)置到原來的位置,程序還是崩潰萍摊。反復驗證幾次挤茄,真的是設(shè)置tableFooterView的位置不當,而造成的程序崩潰冰木,并不是FDTemplateLayoutCell的原因穷劈。

雖然崩潰解決了,但是原因在哪里呢踊沸?當給tableView設(shè)置tableFooterView的發(fā)生了什么歇终?于是,來打斷點測試下逼龟。在tableView的UITableViewDelegate,UITableViewDataSource代理中评凝,打上斷點,如下:

圖6

運行程序腺律,正常走到23斷點處奕短,繼續(xù)放開23斷點宜肉。此時,會發(fā)現(xiàn)程序不會直接走25斷點翎碑,而是走31谬返、35、39斷點杈女,也是tableView的代理方法朱浴。這一點說明,在設(shè)置tableFooterView的時候达椰,系統(tǒng)會自動調(diào)用reload方法翰蠢,去刷新tableView。因此啰劲,當走到39斷點時梁沧,F(xiàn)DTemplateLayoutCell會去根據(jù)標識符獲取cell,而此刻還沒有走到25斷點處蝇裤,所以tableView的cell還沒有注冊上廷支,此刻去獲取cell,就會報錯栓辜,導致程序的崩潰恋拍。

解決方案:先注冊cell,在設(shè)置tableFooterView藕甩。

2.崩潰bug之xib(estimatedRowHeight):

? ? ? ?相信現(xiàn)在好多開發(fā)者都用xib開發(fā)施敢,但是有時候xib開發(fā)遇到的bug,真的讓人無從下手狭莱。主要還沒有崩潰日志僵娃。在項目開發(fā)中,就遇到這么一個問題腋妙。在xib中默怨,直接添加一個tableView,拉屬性等等操作骤素。然后運行程序匙睹,一切OK(此刻是iOS11系統(tǒng))。說明在iOS11系統(tǒng)下济竹,沒有問題垃僚。然后切換到iOS10系統(tǒng),運行程序规辱,發(fā)現(xiàn)直接崩潰谆棺,崩潰日志如下:

圖7

直接崩潰到main函數(shù)里。控制臺也沒有崩潰信息改淑。難道xib加載tableView和系統(tǒng)有關(guān)碍岔?在切換到iOS11系統(tǒng),依舊沒有問題朵夏。有點郁悶蔼啦。于是,用純代碼寫tableView的初始化來驗證下仰猖。發(fā)現(xiàn)不論在iOS10 還是iOS11系統(tǒng)捏肢,都沒有問題,運行一切OK饥侵。這就奇怪了鸵赫,看來真的是xib初始化tableView的問題。

? ?調(diào)試工程躏升,返回到初始xib加載tableView的狀態(tài)辩棒,iOS11不用驗證了,直接在iOS10系統(tǒng)下膨疏,運行一睁,依舊崩潰。難道是xib加載tableView的時候都默認設(shè)置了什么嗎佃却?于是在xib中者吁,查看tableView的一些設(shè)置,發(fā)現(xiàn)一個問題:

圖8

在xib 加載tableView的時候饲帅,會默認選中estimatedRowHeight砚偶,如上圖(圖8)。會不會是這兩個默認設(shè)置的原因洒闸?于是,取消默認選中均芽。然后運行程序(iOS11和iOS10系統(tǒng))丘逸,居然程序運行正常,沒一點毛病掀宋。在勾選上深纲,運行程序崩潰【⒚睿看來真的是它的原因造成的湃鹊。但是為啥系統(tǒng)默認的在iOS10會崩潰呢?按道理來說 不應(yīng)該的呢镣奋。難道是工程里面有別的設(shè)置導致的币呵?

? ? ?為了探討這個問題,又重新創(chuàng)建一個全新的工程侨颈,就初始化一個xib和tableView余赢。所有xib設(shè)置和上面工程一樣芯义,然后運行程序,發(fā)現(xiàn)程序運行居然正常F奁狻?覆Α!(iOS11举塔、iOS10系統(tǒng))都OK绑警。這說明xib上tableView默認勾選也沒有問題呀。那么問題究竟出在什么地方央渣?

? ? ?在項目中计盒,默認選中estimatedRowHeight在iOS10系統(tǒng)下 就會崩潰,是不是在工程里面也設(shè)置這個屬性痹屹,導致沖突的章郁?果不其然,為適配iPhone X時志衍,在項目中加入了如下代碼:

圖9

? ? ?為啥加入這幾行代碼就會崩潰暖庄?看下蘋果怎么定義的吧。

圖10

是不是瞬間明白了楼肪。因此培廓,在iOS11 系統(tǒng)下,程序沒有崩潰春叫。在iOS10系統(tǒng)下肩钠,由于設(shè)置了全局的tableView的estimatedRowHeight屬性,而導致程序崩潰暂殖。

解決方案:注釋掉圖9的代碼价匠,或者加個判斷,只在iOS11下面設(shè)置呛每〔冉眩或者取消圖8xib系統(tǒng)默認勾選。

如有問題晨横,歡迎指正洋腮。Demo地址:測試Demo?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市手形,隨后出現(xiàn)的幾起案子啥供,更是在濱河造成了極大的恐慌,老刑警劉巖库糠,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伙狐,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機鳞骤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門窒百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豫尽,你說我怎么就攤上這事篙梢。” “怎么了美旧?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵渤滞,是天一觀的道長。 經(jīng)常有香客問我榴嗅,道長妄呕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任嗽测,我火速辦了婚禮绪励,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唠粥。我一直安慰自己疏魏,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布晤愧。 她就那樣靜靜地躺著大莫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪官份。 梳的紋絲不亂的頭發(fā)上只厘,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天借跪,我揣著相機與錄音盯仪,去河邊找鬼。 笑死蛆橡,一個胖子當著我的面吹牛钠右,可吹牛的內(nèi)容都是我干的赋元。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼爬舰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寒瓦?” 一聲冷哼從身側(cè)響起情屹,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杂腰,沒想到半個月后垃你,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年惜颇,在試婚紗的時候發(fā)現(xiàn)自己被綠了皆刺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡凌摄,死狀恐怖羡蛾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锨亏,我是刑警寧澤痴怨,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站器予,受9級特大地震影響浪藻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乾翔,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一爱葵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧反浓,春花似錦萌丈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巧婶,卻和暖如春乾颁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艺栈。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工英岭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人湿右。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓诅妹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅人。 傳聞我的和親對象是個殘疾皇子吭狡,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 與焦慮抗爭許久,我嘗試了很多種方法丈莺,想著如何擺脫焦慮划煮。 有一個很瘋狂的日本家庭主婦,她幾乎把家里所有的東西都扔掉了...
    夏瀟瀟雨歇閱讀 333評論 0 1
  • 文/墨安泊 我并不懂茶缔俄,只是喝茶弛秋,就像有人喝咖啡器躏,有人喝可樂一樣,我蟹略,喝茶登失。 在辦公室,每天喝茶挖炬,上午一杯揽浙,下午一...
    墨安泊閱讀 516評論 6 8
  • 13年的時候做了很多荒謬的事情現(xiàn)在想起來其實是后悔的可是后悔有什么用都是我的選擇我的經(jīng)歷 現(xiàn)在遇見我的對先生很包容...
    放牛的小孩閱讀 168評論 0 0