Подтвердить что ты не робот

Отменить все вызовы веб-сервисов от Alamofire

В моем проекте работают 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

                    }
            }
        }
4b9b3361

Ответ 1

class func emptyArr() {
        for(var i=0; i<arrReq.count; i++){
            request = arrReq.objectAtIndex(i) as? Alamofire.Request
            request?.cancel()
        }
    }

Ответ 2

Насколько я могу судить, нет очевидного/простого способа воссоздать сеанс. Предлагаемый способ решения этой проблемы состоит в том, чтобы сохранить и массировать запросы static var requests = [Alamofire.Request?](), а затем, когда вы хотите остановить все запросы, которые вы можете вызвать, используйте request.cancel(). Используя этот подход, вам придется добавить каждый запрос после его создания.

class func stopAllRequests(){
    for request in MyClass.requests{
        if let request = request{
            request.cancel()
        }
    }
}

Похожие проблемы

Ответ 3

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() })
        })
    }