在 Alamofire 中,等待一组调用完成的正确方法是啥?
Posted
技术标签:
【中文标题】在 Alamofire 中,等待一组调用完成的正确方法是啥?【英文标题】: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 中是否有适当/提供的方法来执行此操作?
我可以将每个单独的结果放入队列中,然后等到计数 = 请求总数(显然在单独的线程中),但这似乎有点笨拙。
【问题讨论】:
这个问答解决了如何在Objective-C中做到这一点,翻译很简单:***.com/questions/23253175/… 或***.com/a/28101212/1271826 【参考方案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 请求,完成返回结果。完成显然是在主线程中运行的,我猜这会导致崩溃或可能存在其他问题?该组是一个实例变量。 没有一些实际代码和错误指示就没有线索。 啊,没关系,愚蠢的错误。答案正确。我未能正确平衡进入和离开。 好了 :) 还要记住,如果有单独的错误和成功回调,您需要在两者中都放一个假。以上是关于在 Alamofire 中,等待一组调用完成的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章