在我的项目中,有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
}
}
}
答案 0 :(得分:9)
据我所知,没有明显/简单的方法来重新创建会话。处理此问题的建议方法是保留请求数组static var requests = [Alamofire.Request?]()
,然后当您要停止所有请求时,可以使用request.cancel()
来调用。使用此方法,您必须在创建后附加每个请求。
class func stopAllRequests(){
for request in MyClass.requests{
if let request = request{
request.cancel()
}
}
}
答案 1 :(得分:9)
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() })
})
}
确实有这些方法可以返回尚未完成的所有请求。你可以得到它们,循环遍历它们并取消每一个 - 类似于上面人们的建议。
String
答案 2 :(得分:2)
class func emptyArr() {
for(var i=0; i<arrReq.count; i++){
request = arrReq.objectAtIndex(i) as? Alamofire.Request
request?.cancel()
}
}