2016-08-23 3 views
4

AFURLSessionManager에서 상속 된 HTTPServiceProvider 클래스를 만들었습니다. 아래 코드를 추가하여 데이터를 가져 왔습니다.모든 작업 취소 + AFNetworking 3.0

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
let manager = AFURLSessionManager(sessionConfiguration: configuration) 
let dataTask = manager.dataTaskWithRequest(request) { (response, responseObject, error) in 
     //Perform some task 
} 
dataTask.resume() 

나는 AFURLSesstionManger에서 제공 operationQueue 다시 동일한 요청을 호출하기 전에 몇 가지 다른 클래스 (BaseController.swift)의 모든 작업을 취소 dataTask를 추가 할. 라는

self.operationQueue.addOperationWithBlock{ 
    //Added above code 
} 

그리고 BaseController.swift 파일 내의 - -

HTTPServiceProvide.sharedInstance.operationQueue.cancelAllOperations 

그러나 :(

감사

을 작동하지 않습니다 그것입니다.

이 코드를 시도하지만 작동하지 않음
+0

은 관리자'전에 모든 호출이 시도
을 사용, 나는 새로운 HTTP 요청을
tasks.append(dataTask)

하기 전에 취소하고 모든 작업을 취소 할 모든 dataTask를 추가 .operationQueue.cancelAllOperations()' –

+0

대기열에 작업을 추가하지 않으면 작업을 취소 할 수 있기 때문에 작동하지 않습니다. –

+0

이 프로젝트에서는 가능하지 않을 수 있지만 Swift를 사용하는 경우 AFNetworking 대신 Alamofire를 사용하는 것이 좋습니다. – Fogmeister

답변

2

NSURLSessi를 사용하여 모든 데이터 작업을 취소하려면 에 모든 요청을 취소 할 수

나를 위해
manager.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in 
    dataTasks.forEach { $0.cancel() } 
} 
+0

답변에 대한 의견을 말하십시오. – EnriMR

+0

'operationQueue' 내부에 dataTask를 추가하고'operationQueue' 내부의 모든 작업을 취소하고 싶습니다. –

2

가장 좋은 방법입니다 :

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //manager should be instance which you are using across application 
[manager.session invalidateAndCancel]; 

이 방법은 하나의 큰 장점이있다 : 실패 블록을 호출 실행중인 모든 요청. 당신이 알아야 할

 [manager GET:url 
     parameters:nil 
      progress:^(NSProgress * _Nonnull downloadProgress) { 
       code 
      } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
       code 
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
       //this section will be executed 
      }]; 

2 일 : 나는 예를 들어이 일을 의미

  • 당신이 모두 취소 후 invalidateAndCancel
  • 에 대한
  • 를 사용합니다 AFHTTPSessionManager의 정확한 인스턴스에만 수행 요청을 취소합니다 AFHTTPSessionManager의 새 인스턴스를 초기화해야하는 요청 - 이전 요청으로 예외를 만들려고하면 예외가 발생합니다.
+0

'operationQueue' 내부에 dataTask를 추가하고'operationQueue' 내부의 모든 작업을 취소하고 싶습니다. –

0

작업.
var tasks = [URLSessionDataTask]()
는 내가 func cancelPreviousRequest(){ for task in tasks (task as URLSessionTask).cancel() } tasks.removeAll() }