加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift,alamofire取消之前的请求

发布时间:2020-12-14 05:28:11 所属栏目:百科 来源:网络整理
导读:我有一个NetworkRequest类,我的所有alamofire请求都在这里: class NetworkRequest { static let request = NetworkRequest() var currentRequest: Alamofire.Request? let dataManager = DataManager() let networkManager = NetworkReachabilityManager()
我有一个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()
                }
            }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读