使用Alamofire下载后等待segue时处理用户交互

时间:2016-08-18 22:31:27

标签: ios swift alamofire

我的项目在表格视图中显示元素。当用户单击一个单元格时,单元格将展开以显示更多信息(如App Store更新选项卡),如果用户点击该扩展单元格,则单元格中引用的元素将在新页面中打开(同样,如App Store )。然而,必须先使用Alamofire请求下载该元素,然后才能显示。为了加快速度,我在单元格扩展时开始下载元素,所以当用户决定打开元素时,它可能已经完成了下载。

然而,这就是我的问题:一些元素快速下载,因此很可能在用户打开元素时下载(第二次点击)。但是有些元素要大得多,下载时间也要长(最多6秒)。如果元素尚未完成下载,我应该如何处理用户输入,此外,我应该如何实现它呢?

最简单的方法是完全忽略用户输入,检查元素是否已随每次点击下载以启动segue。然而,忽略用户并且他们必须以相同的意图多次点击是错误的。同样,我在主线程上使用了dispatch_group_wait(),但它更糟糕,因为它会阻止所有输入。

我想要实现的目标如下:

  1. 首先点击:开始下载请求并将其保留在变量中(已经完成)。我不想在请求completionHandler中启动segue,因为我们还不知道
  2. 第二次点按:

    一个。如果元素已下载,请启动segue以将其打开。

    湾如果元素尚未完成下载,请将segue的启动推迟到下载结束。

  3. 我知道这个问题非常大,所以要缩小范围:是否有可能实现上述逻辑?怎么样?

1 个答案:

答案 0 :(得分:1)

您可以使用shouldPerformSegueWithIdentifier:功能取消segue。

实现此功能,如果项目尚未下载,则使用它取消segue,并设置下载完成处理程序可以检查的标志。

下载完成后,如果设置了标志,则完成处理程序可以执行segue。

您可能还应该显示某种活动指示符,以便用户知道数据正在加载