2013-11-22 27 views
36

Ağ iletişimi işlevlerimi AFNetworking'dan AFNetworking v2'a geçirdim ve AFHttpClient yerine IOS6'yı desteklemek için AFHTTPRequestOperationManager kullanıyorum.AFNetworking 2: AFHTTPRequestOperationManager isteği nasıl iptal edilir?

Sorunum AFHttpClient orada iken işlevselliği AFHTTPRequestOperationManager böyle bir bariz bir yöntem yoktur,

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

yöntemi kullanarak bekleyen bir isteği iptal etmek olmasıdır. Ben bir istek kodu yaptığınızda şimdi AFHTTPRequestOperationManager sınıflara ve bir Ivar

AFHTTPRequestOperation *_currentRequest; 

ilan edilir kadar ne yaptık

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

    }]; 
} 

gibi bir şey ve ben bir

var
- (void)cancelCurrentRequest; 

tüm bunların yaptığı

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

Şimdi, bunun iyi bir uygulama olduğunu düşünmüyorum ve yöntem çağrıldığında (NSURLErrorDomain error -999.) olsun, bu yüzden bu işlemi doğru şekilde yapmak için bazı önerilere ihtiyacım var.

Önceden teşekkür ederiz. İsteği gönderdiğinizde çünkü

cevap

79
[manager.operationQueue cancelAllOperations]; 
+3

Thx. Bunu fark ettim, ancak belirli bir GET/POST isteğini iptal etmek isterseniz ne olur? – ozzotto

+3

Eğer cancelAllHTTPOperationsWithMethod: yolunun uygulanmasına bakarsanız, nasıl yapacağınızı öğreneceksiniz. Yöntem ve yolla eşleşen ve onları iptal edenleri bulmak için, yalnızca OperationQueue'daki tüm işlemleri yineleyin. Onları v2'de kaldırmanın nedeni, belirli bir işlemi iptal etmenin gereksiz olduğunu düşünüyorlar mı? –

+0

Yaptığım şey bu. AFHTTPRequestOperationManager alt sınıfımdaki cancelAllHTTPOperationsWithMethod: yolunun bir uygulaması. Thx dostum. – ozzotto

2

Sadece istek olması gerektiğinde cancel gerçekleştirmek ardından yere kaydedin veya statik yapıp, AFHTTPRequestOperationManager alt sınıf

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

den AFHTTPRequestOperation döner yok iptal edildi.

Örnek: cevap için

- (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; 
} 
İlgili konular