CollectionView 的異常
這兩天例行檢視UMeng中的統計資料時出現了一個頻現的BUG,簡直是觸目驚心,我的產品竟然能有BUG,簡直不能忍,直接貼圖吧
首先呢利用dSYM定位到了報錯的具體頁面,這個問題看字面意思是因為CollectionView的 layout 的佈局原因而導致的崩潰
該頁面的的佈局是一個TableView,Cell中會巢狀一個CollectionView而在實際使用的過程中,當前頁面在上拉載入第一到兩頁時並不會產生崩潰,而在資料載入到第三頁之後,就會產生崩潰
[UICollectionView received layout attributes for a cell with an index path that does not exist: <NSIndexPath: 0xc000000000400016> {length = 2, path = 0 - 2}]
打了斷點之後會發現,在執行過 numberOfItemsInSection 後, 不會進入到 cellForItemAt 中,而直接產生崩潰.
在上Google搜尋了一番之後,在Stack overFlow 上有相應的解決方案,在將 collectionView.collectionViewLayout.invalidateLayout()
新增到 numberOfItemsInSection 的 Return之前,使之前的佈局失效,從新進行佈局也會修復BUG, 但是我想 numberOfItemsInSection 是一個調動頻率較高的方法,將佈局失效的程式碼放置入內會不會不合理呢.算了,還是自己動腦子想想其他方法吧.既然已經大概找到問題的方向,解決 BUG 應該是沒什麼問題
我想之前的Layout都可以正常運轉,在載入資料後在Layout方面產生了崩潰,那麼問題應該出現在 reloadData 這裡.
最後檢查程式碼發現,在進行資料載入時判斷是否顯示collectionView時,我將reloadData放置在了判斷的內部進行的,也就是說如果載入到的資料為不顯示collectionView,那麼從快取池中取出的item佈局就會與資料來源不符,並且沒有更新佈局, 就會產生閃退報錯的情況.
好吧...說來說去這個疑難雜症是解決了,原來是我的一個小失誤... 我的鍋,還想了這老半天的BUG,有什麼辦法....怪我咯?
我也很絕望啊!!!
這一個小時夠我看一集人民的名義了啊!!!
相關文章
- 異常-throws的方式處理異常
- 異常-編譯期異常和執行期異常的區別編譯
- 異常篇——異常處理
- 異常和異常呼叫鏈
- [jvm]常見的oom異常JVMOOM
- Java 異常(二) 自定義異常Java
- Java checked異常和unchecked異常。Java
- 異常-try...catch的方式處理異常1
- 異常-try...catch的方式處理異常2
- 異常-自定義異常的實現和測試
- iOS CollectionView 的那些事iOSView
- 異常中的異常——藉助系統異常處理特例實現匪夷所思的漏洞利用
- 異常處理與異常函式函式
- Java 中的異常Java
- 異常的處理
- java中的異常Java
- jmu-Java-06異常-01-常見異常Java
- 一個詭異的 Pulsar InterruptedException 異常Exception
- hibernate異常之--count查詢異常
- Java 異常表與異常處理原理Java
- restframework 異常處理及自定義異常RESTFramework
- javaWeb常見異常的解決方法JavaWeb
- oracle 異常Oracle
- OutOfMemoryError異常Error
- Java異常Java
- 異常(Exception)Exception
- Java 異常Java
- 異常JavaJava
- 【java】異常Java
- java 異常Java
- Flutter 常見異常分析Flutter
- 對Java異常的理解Java
- nginx的upstream異常Nginx
- ORACLE中的異常(轉)Oracle
- Java中常見的異常Java
- java微服務的異常Java微服務
- Java 異常(一) 異常概述及其架構Java架構
- MVC使用異常過濾器處理異常MVC過濾器