ネットワーク機能をAFNetworking
からAFNetworking v2
に移行し、AFHttpClient
の代わりにAFHTTPRequestOperationManager
を使用してiOS6もサポートしています。AFNetworking 2:AFHTTPRequestOperationManagerリクエストをキャンセルするにはどうすればよいですか?
私の問題はAFHTTPRequestOperationManager
にはそのような明白な方法が存在しない、AFHttpClient
に
- (void)cancelAllHTTPOperationsWithMethod:(NSString *)method path:(NSString *)path;
方法を使用して保留中の要求をキャンセルする機能があったということです。私は、要求コードを作るとき、私は今AFHTTPRequestOperationManager
をサブクラス化し、IVAR
AFHTTPRequestOperation *_currentRequest;
を宣言されてまで何をやったか
は
- (void)GetSomething:(NSInteger)ID success:(void (^)(MyResponse *))success failure:(void (^)(NSError *))failure
{
_currentRequest = [self GET:@"api/something" parameters:@{@"ID": [NSNumber numberWithInteger:ID]} success:^(AFHTTPRequestOperation *operation, id responseObject) {
MyResponse *response = [MyResponse responseFromDictionary:responseObject];
success(response);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}
のようなものであると私は
を持っています- (void)cancelCurrentRequest;
すべてが行う方法は、
です。- (void)cancelCurrentRequest
{
if(_currentRequest) {
[_currentRequest cancel]; _currentRequest = nil;
}
}
これは良い習慣ではないと思います。メソッドが呼び出されたとき、私は(NSURLErrorDomain error -999.)
を取得しました。なぜこれを正しく行うにはアドバイスが必要です。
ありがとうございます。あなたがリクエストを送信するときので
Thxを。特定のGET/POST要求を取り消したい場合はどうしたらいいですか? – ozzotto
cancelAllHTTPOperationsWithMethod:pathの実装を調べると、その方法がわかります。これは、operationQueue内のすべての操作を反復して、メソッドとパスに一致するものを見つけ出し、取り消します。彼らがv2でそれらを削除した理由は、特定の操作をキャンセルする必要はないと思いますか? –
それは私がやったことです。私のAFHTTPRequestOperationManagerサブクラスでのcancelAllHTTPOperationsWithMethod:pathの実装です。 Thxメイト。 – ozzotto