ios 取消请求Alamofire

0aydgbwb  于 12个月前  发布在  iOS
关注(0)|答案(6)|浏览(124)

我正在发送一个基于计时器触发的请求。但如果我按下返回按钮,请求似乎仍然处于活动状态,并且响应反过来会使应用程序崩溃。请提出一种取消请求的方法。
使用Xcode 8.2.1 Swift 3
以下是示例请求:

Alamofire.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON {
    response in
    switch response.result {
    case .success(let data):
        success(data as AnyObject?)
    case .failure(let error) :
        failure(error as NSError)
    }
}

字符串
甚至试图无效的计时器上查看消失,但没有帮助。
谢谢你!

mf98qq94

mf98qq941#

Alamofire 4 / Swift 3 / Xcode 8

您可以取消单个请求,具体操作如下:
1 -首先获取请求:

let request = Alamofire.SessionManager.default.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON { response in
    switch response.result {
    case .success(let data):
        success(data as AnyObject?)
    case .failure(let error) :
        failure(error as NSError)
    }
}

字符串
2 -然后,在您的viewDidDisappear中,只需调用:
第一个月
您可以取消所有请求,如下所示:

Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
    sessionDataTask.forEach { $0.cancel() }
    uploadData.forEach { $0.cancel() }
    downloadData.forEach { $0.cancel() }
}

j1dl9f46

j1dl9f462#

this解决方案:

let sessionManager = Alamofire.SessionManager.default 
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in 
dataTasks.forEach { $0.cancel() } 
uploadTasks.forEach { $0.cancel() } 
downloadTasks.forEach { $0.cancel() } 
}

字符串
我还添加了一个检查,以验证这是否是我想要取消的请求:

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

rnmwe5a2

rnmwe5a23#

SWIFT 5

Alamofire.Session.default.session.getTasksWithCompletionHandler({ dataTasks, uploadTasks, downloadTasks in
            dataTasks.forEach { $0.cancel() }
            uploadTasks.forEach { $0.cancel() }
            downloadTasks.forEach { $0.cancel() }
        })

字符串

b4wnujal

b4wnujal4#

如果它能帮助任何人,在我的情况下,我在SessionManager上有一个RequestRetrier,它在请求被取消后重试,所以一定要检查那里!

vnjpjtjt

vnjpjtjt5#

不如这样:

manager.session.invalidateAndCancel()

字符串

vyswwuz2

vyswwuz26#

Alamofire 5在Session上有一个取消所有请求的函数:

Alamofire.Session.default.cancelAllRequests()

字符串
另一个是withAllRequests,可用于对活动请求集执行操作。
电子邮件:https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#operating-on-all-requests
另外,请注意,Alamofire文档指出,底层URLSession对象:
应该NOT用于与底层URLSessionTask进行交互。这样做会破坏跟踪这些任务的内部Alamofire逻辑。

相关问题