Ios 捕获UICollectionView在Swift中执行批更新断言失败?

Ios 捕获UICollectionView在Swift中执行批更新断言失败?,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我正在使用UICollectionView的方法。问题是,有时复杂的diff逻辑会失败,并返回不正确的要插入的节数。这会导致我插入的项数与从数据源报告的项数不匹配。无论何时发生这种情况,我们都会得到以下错误: -[CollectionView\u EndItemAnimationWithInvalizationContext:TentiveyForreOrdering:animator:]中的断言失败 执行批更新时出错:更新无效:节数无效。更新后集合视图中包含的节数(25)必须等于更新前集合视图

我正在使用UICollectionView的方法。问题是,有时复杂的diff逻辑会失败,并返回不正确的要插入的节数。这会导致我插入的项数与从数据源报告的项数不匹配。无论何时发生这种情况,我们都会得到以下错误:

-[CollectionView\u EndItemAnimationWithInvalizationContext:TentiveyForreOrdering:animator:]中的断言失败

执行批更新时出错:更新无效:节数无效。更新后集合视图中包含的节数(25)必须等于更新前集合视图中包含的节数(19),加上或减去插入或删除的节数(0插入,0删除)

我意识到正确的解决方案是修复我的差异逻辑,这样返回的项目数和我调用的插入数之间就不会有不匹配

然而,我想做的是,即使我的逻辑在将来失败,它也会重新加载集合视图的数据,而不是破坏应用程序


如何在Swift中执行此操作?

默认情况下,Swift中无法捕获异常,因此请创建类似于或的桥接

即使捕捉到断言失败,也需要重新创建集合视图

TryCatch.try({
  collectionView.performBatchUpdates({
    collectionView.insertItems(at: indexPaths)
    collectionView.insertSections(sections)
  }, completion: nil)
}, catch: { exception in
  print("Error updating collection view: \(exception)")

  collectionView.removeFromSuperview()

  // recreate the collection view (make sure to set datasource and delegates)
  collectionView = ...
  collectionView.dataSource = ...
  collectionView.delegate = ...
}, finally: nil)