swift,alamofire取消之前的请求

栏目: Swift · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/39094022/swift-alamofire-cancel-previous-request

我有一个NetworkRequest类,我的所有alamofire请求都在这里:

class NetworkRequest {
        static let request = NetworkRequest()

        var currentRequest: Alamofire.Request?

        let dataManager = DataManager()
        let networkManager = NetworkReachabilityManager()
        let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT

        func downloadData<T: Film>(slug: String, provider: String, section: String, dynamic: String, anyClass: T, completion: ([T]?) -> Void ) {
            var token: String = ""

            if LOGGED_IN == true {
                token = "\(NSUserDefaults.standardUserDefaults().valueForKey(TOKEN)!)"
            }

            let headers = [
                "Access": "application/json",
                "Authorization": "Bearer \(token)"
            ]

            let dataUrl = "\(BASE_URL)\(slug)\(provider)\(section)\(dynamic)"
            print(headers)
            print(dataUrl)

            if networkManager!.isReachable {

                currentRequest?.cancel()

                dispatch_async(dispatch_get_global_queue(priority, 0)) {

                    if let url = NSURL(string: dataUrl) {
                        let request = Alamofire.request(.GET, url, headers: headers)

                        request.validate().responseJSON { response in
                            switch response.result {
                            case .Success:
                                if let data = response.result.value as! [String: AnyObject]! {
                                    let receivedData = self.dataManager.parseDataToFilms(data, someClass: anyClass)
                                    completion(receivedData)
                                }

                            case .Failure(let error):
                                print("Alamofire error: \(error)")

                                if error.code == 1001 {
                                    self.goToNoConnectionVC()
                                }

                                print("canceled")
                            }

                        }
                    }
                }
            } else {
                goToNoConnectionVC()
            }
        }
}

我需要取消以前的downloadData请求,当新的请求启动时,尝试使用currentRequest?.cancel()取消,但它没有帮助.

已经尝试使用NSOperationsBlock取消操作,但它不会取消当前操作.

我现在阻止UI,因此用户无法发送另一个请求.但这不正确,以后会导致一些错误……

请帮助

现在在Alamofire 4上Alamofire.Manager.sharedInstance.session不可用你应该使用 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() } 
}

如果您想取消(暂停,恢复)特定请求,您可以检查.forEach块中的请求URL,如下所示:

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

翻译自:https://stackoverflow.com/questions/39094022/swift-alamofire-cancel-previous-request


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

乌合之众

乌合之众

(法)勒庞 / 冯克利 / 中央编译出版社 / 2011-5-1 / 16.00元

古斯塔夫・勒庞 Gustave Le Bon(1841-1931) 法国著名社会心理学家。他自1894年始,写下一系列社会心理学著作,以本书最为著名;在社会心理学领域已有的著作中,最有影响的,也是这本并不很厚的《乌合之众》。古斯塔夫・勒庞在他在书中极为精致地描述了集体心态,对人们理解集体行为的作用以及对社会心理学的思考发挥了巨大影响。《乌合之众--大众心理研究》在西方已印至第29版,其观点新颖,语......一起来看看 《乌合之众》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具