【问题标题】:In Alamofire, what is the proper way to wait for a set of calls to complete?在 Alamofire 中,等待一组调用完成的正确方法是什么?
【发布时间】:2015-11-25 16:21:11
【问题描述】:

使用 Alamofire 我需要发出一组服务器请求并等待它们全部成功或失败,然后将结果收集到结果对象中。

在 Alamofire 中是否有适当/提供的方法来执行此操作?

我可以将每个单独的结果放入队列中,然后等到计数 = 请求总数(显然在单独的线程中),但这似乎有点笨拙。

【问题讨论】:

标签: ios swift alamofire


【解决方案1】:

总结一下How to tell if blocks in loop all have completed executing?这个问答,你想创建一个dispatch group,每次操作开始就进组,每次操作完成就退出组,最后用display_group_notify执行一次block该组已完成:

let group = dispatch_group_create()

foreach operation {
    dispatch_group_enter(group)

    startOperation(..., completion:{
        dispatch_group_leave(group)
    })
}

dispatch_group_notify(group, dispatch_get_main_queue()) {
    // code to run when all operations complete
}

【讨论】:

  • 我正在这样做,但是 dispatch_group_leave() 在第一次被调用时就崩溃了。此代码位于类实例中的函数中,该函数存储在静态变量中(测试代码不是真正的应用程序),因此实例不会释放。 “操作”是 Alamofire 请求,完成返回结果。完成显然是在主线程中运行的,我猜这会导致崩溃或可能存在其他问题?该组是一个实例变量。
  • 没有一些实际代码和错误指示就没有线索。
  • 啊,没关系,愚蠢的错误。答案正确。我未能正确平衡进入和离开。
  • 好了 :) 还要记住,如果有单独的错误和成功回调,您需要在两者中都放一个假。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2023-03-22
  • 2021-10-15
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多