AFNetworking 2.0取消特定的任务

我尝试了networking2.0,只是想弄清楚如何取消特定的任务。 旧的方法是使用类似的东西

[self cancelAllHTTPOperationsWithMethod:@"POST" path:@"user/receipts"] 

但在2.0中我没有看到这样的东西

我创build了AFHTTPSessionManager的子类,它使我可以访问未完成的任务数组,我可以直接取消它们,但是我不知道如何识别另一个任务,所以我只能取消特定的任务。 任务有一个任务标识符,但这似乎并不是我所需要的。

 NSString *path = [NSString stringWithFormat:@"user/receipts"]; [self.requestSerializer setAuthorizationHeaderFieldWithUsername:[prefs valueForKey:@"uuid"] password:self.store.authToken]; [self GET:path parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { completionBlock(responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { errorBlock(error); }]; 

现在,如果我只想取消这个请求,我将如何处理这个?

您可以将任务存储在variables中,以便以后可以访问它:

 NSURLSessionDataTask* task = [self GET:path parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { completionBlock(responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { errorBlock(error); }]; 

然后只需取消[task cancel]

另一种方法是保存任务的任务ID,然后询问URL会话的任务并确定你想取消的任务:

 // save task ID _savedTaskID = task.taskIdentifier; // cancel specific task for (NSURLSessionDataTask* task in [self dataTasks]) { if (task.taskIdentifier == _savedTaskID) { [task cancel]; } } 

没有必要保存它,这里是我的实现,使用您的AFURLSessionManager的子类取消特定的请求:

 - (void)cancelAllHTTPOperationsWithPath:(NSString *)path { AFURLSessionManager * yourSessionManager = [self getSessionManager]; [[yourSessionManager session] getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { [self cancelTasksInArray:dataTasks withPath:path]; [self cancelTasksInArray:uploadTasks withPath:path]; [self cancelTasksInArray:downloadTasks withPath:path]; }]; } - (void)cancelTasksInArray:(NSArray *)tasksArray withPath:(NSString *)path { for (NSURLSessionTask *task in tasksArray) { NSRange range = [[[[task currentRequest]URL] absoluteString] rangeOfString:path]; if (range.location != NSNotFound) { [task cancel]; } } } 

你可以做以下事情

 NSArray *operations = [[[MyClient sharedClient] operationQueue] operations]; if(operations && operations.count > 0){ for (NSOperation *operation in operations) { if([operation isKindOfClass:[AFHTTPRequestOperation class]]){ AFHTTPRequestOperation *httpOperation = (AFHTTPRequestOperation *)operation; NSLog(@"%@", [[httpOperation request] URL]); //--- if this is your request then cancel it --> [httpOperation cancel]; } } } 

其中MyClientAFHTTPClient的子 ,而函数sharedClient是一个静态函数,它返回MyClient的单例实例