項(xiàng)目有個(gè)需求是分頁的羹与,在table的最后一個(gè)cell的點(diǎn)擊效果是點(diǎn)擊添加一條數(shù)據(jù),本來挺簡(jiǎn)單的一個(gè)問題結(jié)果遇到個(gè)crash bug庶灿,纵搁,,郁悶了好幾個(gè)小時(shí)往踢,腾誉,在這里總結(jié)一下。
if (indexPath.row<listArr.count) {BuyListInfoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:BUYLIST_INFO_CELL forIndexPath:indexPath];}
if(indexPath.row==listArr.count){BuyListAddCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:BUYLIST_ADD_CELL forIndexPath:indexPath]; } else return nil
在datasource中返回cell的方法中我是這么添加cell的邏輯的在下拉刷新的時(shí)候會(huì)出現(xiàn)一些問題
在下拉刷新的時(shí)候會(huì)先調(diào)用reloadData方法,如果下拉的距離超過了一個(gè)cell的高度利职,在重用機(jī)制的情況下回滾的時(shí)候會(huì)再次調(diào)用
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
這個(gè)代理方法趣效,但是
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
cell數(shù)量返回的代理卻不會(huì)被調(diào)用也就是說數(shù)組的數(shù)據(jù)被清空了但是實(shí)際上table的cell數(shù)量卻沒有刷新,猪贪,導(dǎo)致了在cell的返回中返回了nil所以引起了crash跷敬。
解決方法,一種是在remove掉數(shù)組數(shù)據(jù)之后進(jìn)行一次tableview reloadData確保行數(shù)的正確返回热押,另一種是通過一個(gè)NSInteger類型的標(biāo)記作為邏輯計(jì)算方式進(jìn)行邏輯判斷西傀,最后一種就是不返回Nil在else的情況下也添加一個(gè)邏輯這樣崩潰的問題就解決掉了。
這種類型的問題一般比較坑爹桶癣。池凄。。因?yàn)榭赡苡械氖謾C(jī)會(huì)發(fā)生crash有的手機(jī)卻沒事兒鬼廓,導(dǎo)致原因比較難找肿仑。