在我的项目中,有4个Web服务在后台运行.我想在没有等待响应的情况下从当前状态注销时停止所有这些服务.我找到了这样做的代码
Alamofire.Manager.sharedInstance.session.invalidateAndCancel()
但在打电话给我之后,我无法再次拨打服务电话.有什么办法可以取消所有正在运行的请求吗?
这是我的服务调用代码
func getAllCount(parameters: [String: AnyObject],completion: (success : Bool) -> Void) { PKHUD.sharedHUD.contentView = PKHUDTextView(text: "Loading...") PKHUD.sharedHUD.show() request = Alamofire.request(.POST, GlobalConstants.KGetAllCount, parameters: parameters, encoding:.JSON).responseJSON { response in switch response.result { case .Success(let JSON): PKHUD.sharedHUD.hide() print("Success with JSON: \(JSON)") let status : NSString = JSON.valueForKey("status") as! String if(status .isEqualToString("1")){ MyViewState.QJoined = JSON.valueForKeyPath("data.TotalJoinQueue") as! String MyViewState.Qstarted = JSON.valueForKeyPath("data.TotalCreatedQueue") as! String MyViewState.Bumps = JSON.valueForKeyPath("data.TotalBump") as! String completion(success: true) break }else{ completion(success: false) Helper.globalAlert(JSON.valueForKey("data") as! String) break } case .Failure(let error): PKHUD.sharedHUD.hide() print("Request failed with error: \(error)") completion(success: false) break } } }
Alex Pelleti.. 9
据我所知,没有明显/简单的方法来重新创建会话.处理此问题的建议方法是保留请求数组,static var requests = [Alamofire.Request?]()
然后在要停止所有可以调用的请求时使用request.cancel()
.使用此方法,您必须在创建后附加每个请求.
class func stopAllRequests(){ for request in MyClass.requests{ if let request = request{ request.cancel() } } }
类似问题
据我所知,没有明显/简单的方法来重新创建会话.处理此问题的建议方法是保留请求数组,static var requests = [Alamofire.Request?]()
然后在要停止所有可以调用的请求时使用request.cancel()
.使用此方法,您必须在创建后附加每个请求.
class func stopAllRequests(){ for request in MyClass.requests{ if let request = request{ request.cancel() } } }
类似问题
NSURLSession
确实有这些方法可以返回所有尚未完成的请求.你可以得到它们,循环遍历它们并取消每一个 - 类似于上面人们的建议.
if #available(iOS 9.0, *) { Manager.sharedInstance.session.getAllTasksWithCompletionHandler { (tasks) -> Void in tasks.forEach({ $0.cancel() }) } } else { // Fallback on earlier versions Manager.sharedInstance.session.getTasksWithCompletionHandler({ $0.0.forEach({ $0.cancel() }) $0.1.forEach({ $0.cancel() }) $0.2.forEach({ $0.cancel() }) }) }