由于晚期API响应,UITableView崩溃

时间:2018-04-25 10:11:32

标签: swift tableview

我是swift的新手。

我顶部有4个标签,下面有一个桌面视图。在单击每个选项卡时,将进行API调用并使用data填充表视图。但是,如果我在API响应频繁出现之前非常快速地单击选项卡,则应用程序崩溃。

它显示了不同的问题。 有时,

  • 数组索引超出范围
  • [UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]:row(0)超出section(0)的section(0)。
  • 由于未捕获的异常终止应用程序' NSRangeException',原因:' - [UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]:row(0)超出section(0)的section(0)。 '
  • 由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无效更新:第0部分中的行数无效。更新后现有部分中包含的行数(1)必须等于更新前的该部分中包含的行数(1),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入的行数或者超出该部分(0移入,0移出)。'

会出现什么问题?我正在调用API,删除旧的数组数据并将新数据解析到它中并在主线程中调用tableview.reload()方法。请帮帮我。

1 个答案:

答案 0 :(得分:0)

我认为错误的多线程概念存在问题。在当前的实现中,如果快速切换选项卡,当您在一个选项卡上并且之前的API请求之一完成时,您可能会遇到这种情况。因此,您将从另一个选项卡中填充错误数据的表视图。为避免这些,您可以选择以下之一:

  1. 切换到标签页时,请取消之前的所有请求。
  2. 仅当请求对应于当前选定的选项卡时,才会以某种方式将请求的结果映射到适当的选项卡并更新表视图。