美文网首页
[self.collectionView insertItems

[self.collectionView insertItems

作者: 似奔跑的野马 | 来源:发表于2018-10-29 18:41 被阅读0次

    开发中我们有时希望直接插入或者删除cell,而不是直接reloadData.这样做可以有时避免界面闪动,做到更好的过渡。但数据某些情况下会出现下面问题

     [self.collectionView insertItemsAtIndexPaths:indexPaths];
    2016-06-20 10:56:16.906 xxx[6095:1075992] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert item 36 into section 1, but there are only 36 items in section 1 after the update'
    //尝试将item36插入到第1部分中,但在更新之后的第1部分,只有36项
    
    

    更新UICollectionView,数据源的数据只有36个,更新插入时,item的index最大为35,36超过故异常crash。

    note:更新UICollectionView,数据源和更新的cell必须对应一致。

    代码类似:

    //需要插入的indexPaths
          NSMutableArray *indexpaths = [NSMutableArray array];
            for (int i = oldCellCount; i < newCellCount; i++) {
                [indexpaths addObject:[NSIndexPath indexPathForItem:i inSection:1]];
            }
    
            NSUInteger cellNumber = [_collectionView numberOfItemsInSection:1];
            //更新后的cell数量= 更新前数量 + 需要更新的个数
            if ((cellNumber + indexpaths.count) == self.discoverEngine.contents.count && indexpaths.count > 0) {
    
    
                [_collectionView performBatchUpdates:^{
                    [_collectionView insertItemsAtIndexPaths:indexpaths];
    
    
                } completion:nil];
            } else {
                [_collectionView reloadData];
            }
    
    

    相关文章

      网友评论

          本文标题:[self.collectionView insertItems

          本文链接:https://www.haomeiwen.com/subject/fbkitqtx.html