2013-11-22 20 views
36

ネットワーク機能を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.)を取得しました。なぜこれを正しく行うにはアドバイスが必要です。

ありがとうございます。あなたがリクエストを送信するときので

答えて

79
[manager.operationQueue cancelAllOperations]; 
+3

Thxを。特定のGET/POST要求を取り消したい場合はどうしたらいいですか? – ozzotto

+3

cancelAllHTTPOperationsWithMethod:pathの実装を調べると、その方法がわかります。これは、operationQueue内のすべての操作を反復して、メソッドとパスに一致するものを見つけ出し、取り消します。彼らがv2でそれらを削除した理由は、特定の操作をキャンセルする必要はないと思いますか? –

+0

それは私がやったことです。私のAFHTTPRequestOperationManagerサブクラスでのcancelAllHTTPOperationsWithMethod:pathの実装です。 Thxメイト。 – ozzotto

2

あなたは、単に要求をする必要がある場合cancelを行い、その後どこかに保存したり、静的にすると、AFHTTPRequestOperationManagerをサブクラス化する

- (AFHTTPRequestOperation *)GET:(NSString *)URLString 
        parameters:(id)parameters 
         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 

からAFHTTPRequestOperationリターンを持っていませんキャンセル。

例:答えを

- (void)sendRequestToDoSomething 
{ 
    static AFHTTPRequestOperation *operation; 
    if(operation) //cancel operation if it is running 
     [operation cancel]; 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    //configure manager here.... 

operation = [manager GET:urlString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    //do something here with the response 
    operation = nil; 
} failure:^(AFHTTPRequestOperation *op, NSError *error) { 
{ 
    //handle error 
    operation = nil; 
} 
関連する問題