2016-08-23 10 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にdataTaskを追加し、再び同じ要求を呼び出す前に、いくつかの他のクラス(BaseController.swift)ですべての操作をキャンセルしたいです。

は、このコードを試みたが、働いていない -

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

そしてBaseController.swiftファイルと呼ばれる内部 -

HTTPServiceProvide.sharedInstance.operationQueue.cancelAllOperations 

しかし、そのは:(

おかげ

を働いていませんが。
+0

を使用追加しました.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]()
、その後、私は新しいHTTP要求
tasks.append(dataTask)

を行う前にキャンセルすると、すべての操作をキャンセルしたいすべてのdataTaskが、私はマネージャー `前に、すべてのコールでこれを試す
func cancelPreviousRequest(){ for task in tasks (task as URLSessionTask).cancel() } tasks.removeAll() }

関連する問題