切换段控制崩溃
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.
崩溃的发生
我有一个顶部有 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. 崩溃的发生