Ответ 1
class func emptyArr() {
for(var i=0; i<arrReq.count; i++){
request = arrReq.objectAtIndex(i) as? Alamofire.Request
request?.cancel()
}
}
В моем проекте работают 4 веб-службы, работающие в фоновом режиме. Я хотел бы остановить все эти службы при выходе из текущего состояния, не дожидаясь ответа. Я нашел этот код для этого
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
}
}
}
class func emptyArr() {
for(var i=0; i<arrReq.count; i++){
request = arrReq.objectAtIndex(i) as? Alamofire.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() })
})
}