切换段控制崩溃

Crash on switching segment control

我有一个顶部有 4 个部分的表格视图。在第 1 段我加载了 76 行,在第 3 段我有 4 行,在第 4 段我有大约 25 行并且在第 2 段没有任何内容。如果每个段中的行没有向下滚动并且如果所有行位于顶部(即第一行在每个段的总行数中可见)那么无论我如何切换选项卡,都不会出现任何崩溃。

但是举例来说,如果在第 1 段,我向下滚动行然后移动到第 3 段,然后出现崩溃 fatal error: Index out of range。可能是由于两个选项卡上的行数不匹配。但不确定修复。希望有人能帮忙...

从这个案例中,我开始了解到您对三个段使用相同的 UITableView 我也了解到您的调用 tableView.reloadData() 当您更改段时发生崩溃是因为一个段有更多数据和其他滚动tableView时没有的。 tableView 的可见索引位置在其他 segement 的数据源中不可用,因为只有你会崩溃 解决这个问题你需要滚动到第 0 个索引,如果计数大于 0,然后重新加载 tableView

在更改要填充的值之前单击其他段时,滚动回第 0 个索引

 if listArray.count > 0{
      let index = IndexPath(row: 0, section: 0)
      self.tableView.scrollToRow(at: index, at: .bottom, animated: false)
 } 

然后将 clickedSegement 的值更改为 listArray

然后重新加载表格视图

self.tableView.reloadData()

希望对您有所帮助

请检查您是否满足以下条件?

  • 更改段控件时,您必须重新加载 tableView 使用 NewDataSource,所以你要更改 UI 所以请 将 reloadData 的代码放在主线程.
  • 确保 numberOfRows 是通过委托方法维护的 while 更改段 Control.
  • 最后但同样重要的是,另一种防止崩溃的方法是, 您可以检查 indexPath.row < yourArray.count cellForRowAtIndexPath 委托方法。这将肯定地防止 index out of range.
  • 崩溃的发生