iOS Alamofire停止所有请求

Faw*_*kes 19 ios alamofire

有什么办法可以说:

Alamofire.Manager.cancelAllRequests()还是Alamofire.Manager.sharedInstance.cancelAllRequests()

当然,如果这些请求(特别是在图像下载的情况下)只会暂停,以便稍后我将使用相同的URL但是......我至少能够在全局级别取消所有请求,这将是很好的.一些建议?

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

ldi*_*ual 63

cnoon单线解决方案很棒,但它使NSURLSession无效,你需要创建一个新的解决方案.

另一个解决方案是这个(iOS 7+):

session.getTasks { dataTasks, uploadTasks, downloadTasks in
    dataTasks.forEach { $0.cancel() }
    uploadTasks.forEach { $0.cancel() }
    downloadTasks.forEach { $0.cancel() }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您仅定位iOS 9+:

session.getAllTasks { tasks in
    tasks.forEach { $0.cancel() }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您尚未在alamofire中配置URLSession,则可以使用`Alamofire.SessionManager.default.session'进行默认设置. (4认同)

cno*_*oon 17

您应该NSURLSession直接使用这些方法来完成此任务.

Alamofire.Manager.sharedInstance.session.invalidateAndCancel()
Run Code Online (Sandbox Code Playgroud)

这将调用所有完成处理程序,并具有取消错误.如果您需要能够恢复下载,那么您需要resumeData从请求中获取它(如果可用).然后在准备好后使用恢复数据恢复请求.

  • 新的调用是:`Alamofire.SessionManager.default.session.invalidateAndCancel()`其重构为https://github.com/Alamofire/Alamofire/commit/ade5a2e18e81f58d9ea39a4223f79e396578dc78#diff-47e97757a068c92a8406e56b15e64465 (6认同)
  • 在打电话给我后,我再也无法提出请求了 (2认同)

Yas*_*edi 10

下面的代码停止了[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() }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只需复制并粘贴该功能即可.