iOS Alamofire停止所有请求

有什么办法,我可以举例说:

Alamofire.Manager.cancelAllRequests()Alamofire.Manager.sharedInstance.cancelAllRequests()

当然,如果这些请求特别是在图像下载的情况下只会在稍后我会调用相同的URL时暂停,但是…我至less需要能够取消全局级别的所有请求。 有些build议?

在我的应用程序中,我在Alamofire.request(.Post ….)方法上面有一个包装器,所以我真的很感激,除了上面指定的方式之外,我不以另一种方式创build或与Manager类交互。

您应该直接使用NSURLSession方法来完成此操作。

 Alamofire.Manager.sharedInstance.session.invalidateAndCancel() 

这将调用所有你的完成处理程序与取消错误。 如果您需要恢复下载,那么您需要从请求中获取resumeData (如果可用)。 然后,在准备就绪后,使用恢复数据恢复请求。

cnoon解决scheme非常棒,但它使NSURLSession失效,您需要创build一个新的解决scheme。

另一个解决scheme是(iOS 7+):

 session.getTasks { dataTasks, uploadTasks, downloadTasks in dataTasks.forEach { $0.cancel() } uploadTasks.forEach { $0.cancel() } downloadTasks.forEach { $0.cancel() } } 

或者,如果您只针对iOS 9+:

 session.getAllTasks { tasks in tasks.forEach { $0.cancel() } } 

如果有帮助,我得到了一个答案,以我自己的Alamofire.Manager实例工作。 我有一个叫做NetworkHelper的单例类,它有一个名为alamoFireManager的属性,它处理我所有的networking请求。 我只是在该alamoFireManager属性上调用NSURSession invalidateAndCancel() ,在setAFconfig()重置我的pipe理器,然后我很好。

 class NetworkHelper { private var alamoFireManager : Alamofire.Manager! class var sharedInstance: NetworkHelper { struct Static { static var instance: NetworkHelper? static var token: dispatch_once_t = 0 } dispatch_once(&Static.token) { Static.instance = NetworkHelper() } return Static.instance! } init(){ setAFconfig() } func setAFconfig(){ let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForResource = 4 configuration.timeoutIntervalForRequest = 4 alamoFireManager = Alamofire.Manager(configuration: configuration) } func cancelAllRequests() { print("cancelling NetworkHelper requests") alamoFireManager.session.invalidateAndCancel() setAFconfig() } 

在Swift 2.2中

 let session = Alamofire.Manager.sharedInstance.session session.getAllTasksWithCompletionHandler() { tasks in tasks.forEach { $0.cancel() } } 

完成@LoïsDi Qual后,您可以检查请求URL并取消(暂停,恢复)您需要的请求:

 downloadTasks.forEach { if ($0.originalRequest?.url?.absoluteString == url) { $0.cancel() } } 

以下代码停止[Swift 3]中的请求:

此外,代码适用于iOS 8+的 Alamofire v3和v4 plus。

 func stopTheDamnRequests(){ if #available(iOS 9.0, *) { Alamofire.SessionManager.default.session.getAllTasks { (tasks) in tasks.forEach{ $0.cancel() } } } else { Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in sessionDataTask.forEach { $0.cancel() } uploadData.forEach { $0.cancel() } downloadData.forEach { $0.cancel() } } } } 

只需复制并粘贴该function。