アプリケーションで AFNetworking を使用しており、進行状況 HUD に「タップしてキャンセル」機能を実装しようとしています。すべての HTTP 要求を管理するシングルトン クラスがあります。プログレス HUD がタップされた場合は、次のように呼び出します。
[[[HTTPRequestSingleton sharedClient] operationQueue] cancelAllOperations];
しかし、これは必要な操作を「キャンセル」しません。NSOperationQueue
私はドキュメントを読んで、これに出くわしました:
操作オブジェクトをキャンセルすると、オブジェクトはキューにオブジェクトを残しますが、タスクをできるだけ早く中止する必要があることをオブジェクトに通知します。現在操作を実行している場合、これは、操作オブジェクトの作業コードがキャンセル状態を確認し、それがしていることを停止し、完成したとおりに自分自身をマークする必要があることを意味します。キューに掲載されていないがまだ実行されていない操作の場合、キューは引き続き操作オブジェクトの開始方法を呼び出して、キャンセルイベントを処理し、完成したとおりに自分自身をマークする必要があります。
そしてcancelAllOperations
方法に関して:
このメソッドは、現在キューにあるすべての操作にキャンセル メッセージを送信します。キューに入れられた操作は、実行を開始する前にキャンセルされます。操作が既に実行されている場合、キャンセルを認識して実行を停止するのはその操作次第です。
私の問題は、すぐにキャンセルしたい、すでに実行中の操作に特に関係しているようです。AFNetworking では、リクエストに関するすべての情報をキャンセルして破棄する必要があることを操作に警告するにはどうすればよいですか?
操作に使用するコード
AFJSONRequestOperation *loginOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//operation was successful
if (loginOperation.isCancelled)
{
//can't do this. variable 'loginOperation' is uninitialized when captured by block
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
//operation failed
}];