项目有个需求是分页的,在table的最后一个cell的点击效果是点击添加一条数据,本来挺简单的一个问题结果遇到个crash bug,,,郁闷了好几个小时,,在这里总结一下。
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的逻辑的在下拉刷新的时候会出现一些问题
在下拉刷新的时候会先调用reloadData方法,如果下拉的距离超过了一个cell的高度,在重用机制的情况下回滚的时候会再次调用
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
这个代理方法,但是
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
cell数量返回的代理却不会被调用也就是说数组的数据被清空了但是实际上table的cell数量却没有刷新,,导致了在cell的返回中返回了nil所以引起了crash。
解决方法,一种是在remove掉数组数据之后进行一次tableview reloadData确保行数的正确返回,另一种是通过一个NSInteger类型的标记作为逻辑计算方式进行逻辑判断,最后一种就是不返回Nil在else的情况下也添加一个逻辑这样崩溃的问题就解决掉了。
这种类型的问题一般比较坑爹。。。因为可能有的手机会发生crash有的手机却没事儿,导致原因比较难找。