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];