集合视图完成处理程序的PerformBatchUpdates未执行

时间:2019-11-27 03:38:51

标签: ios objective-c swift iphone mobile

我当前遇到的有趣问题。在某些情况下,在UICollectionView实例上调用performBatchUpdates方法时,将导致不执行完成处理程序。

collectionView.performBatchUpdates({
            collectionView.insertItems(at: indexPaths)
        }) { _ in
            if self.delegate.responds(to: #selector(self.delegate.sectionNeedsToBeHidden)) {
                self.delegate.sectionNeedsToBeHidden?()
            }
        }
    }

在向collection view进行插入时,不会调用完成处理程序。但是,当执行相同的逻辑(除了将行collectionView.insertItems(at: indexPaths)更改为collectionView.deleteItems(at: indexPaths)之外)时,将调用完成处理程序。我目前对发生这种情况的原因的猜测是关于收集视图的先前状态的,因此它仅在删除后将更改注册到数据源,从而导致调用完成处理程序。但是,对于仅在删除项目而不插入项目时调用completionHandler的{​​{1}}的原因,该解决方案并不确定。如果有人对这个确切问题有任何见解,或者对performBatchUpdates的工作原理有任何见解,我将不胜感激

1 个答案:

答案 0 :(得分:0)

每当您插入一行或从集合视图中删除项目时,都必须更新一些项目数据,例如下面的代码

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.myItems.count
}

self.myItems.count首先需要更新。因此,请先更新您的商品计数,然后执行批量更新。