example afnetworking-2

example - AFNetworking 2: cómo cancelar una solicitud AFHTTPRequestOperationManager?



afnetworking example (2)

No tiene que subclasificar AFHTTPRequestOperationManager , porque cuando envía una solicitud, AFHTTPRequestOperation regresa de la

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

simplemente guárdelo en algún lugar o cree estática y luego realice la cancel cuando la solicitud deba cancelarse.

Ejemplo:

- (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; }

AFNetworking mi funcionalidad de red de AFNetworking a AFNetworking v2 y en lugar de AFHttpClient estoy usando AFHTTPRequestOperationManager para admitir iOS6 también.

Mi problema es que, mientras estaba en AFHttpClient existía la funcionalidad para cancelar una solicitud pendiente usando el

- (void)cancelAllHTTPOperationsWithMethod:(NSString *)method path:(NSString *)path;

método, en el AFHTTPRequestOperationManager no existe un método tan obvio.

Lo que he hecho hasta ahora es AFHTTPRequestOperationManager subclases de AFHTTPRequestOperationManager y declarar un iVar

AFHTTPRequestOperation *_currentRequest;

Cuando hago una solicitud, el código es algo así como

- (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); }]; }

y tengo un

- (void)cancelCurrentRequest;

métodos que todo lo que hace es

- (void)cancelCurrentRequest { if(_currentRequest) { [_currentRequest cancel]; _currentRequest = nil; } }

Ahora, no creo que esto sea una buena práctica y cuando se llama al método obtengo (NSURLErrorDomain error -999.) por lo que necesito algunos consejos para hacer esto correctamente.

Gracias de antemano.


[manager.operationQueue cancelAllOperations];