如何使用 afnetworking 取消网络请求

Posted

技术标签:

【中文标题】如何使用 afnetworking 取消网络请求【英文标题】:How to cancel network request with afnetworking 【发布时间】:2012-06-17 09:11:02 【问题描述】:

在我使用 AFNetworking 进行网络请求之前,有没有办法取消所有网络请求(由另一种方法启动的请求) 我尝试如下但不工作:

- (void)sendRequest:(NSUInteger)page


NSURL *aUrl = [NSURL URLWithString:@"http://www.abc.com/"];
AFHTTPClient *httpClientToCancel = [[AFHTTPClient alloc] initWithBaseURL:aUrl];
[httpClientToCancel cancelAllHTTPOperationsWithMethod:@"POST" path:@"product/like"];
[httpClientToCancel release];

... start a new request here .....

但不起作用。我只想在开始新请求之前取消所有请求(至少是我上面写的请求)。

谢谢!

【问题讨论】:

【参考方案1】:

[[httpClient operationQueue] cancelAllOperations];

【讨论】:

这行得通吗?我不确定我的请求是否通过创建一个新的 httpClient 实例并调用 cancelAllOperations 来取消。 这对我不起作用...即使在调用此函数后,数据也会一直同步到服务器。请帮忙!! 我认为,这里需要提一下,所有被取消操作的失败块仍然被调用,你必须检查错误代码 -999 代表“操作取消”。所以取消操作不会阻止运行失败块!【参考方案2】:

不要创建新的AFHTTPClient 实例。

试试"[self cancelAllHTTPOperationsWithMethod:@"POST" path:@"product/like"];

【讨论】:

在这种情况下self 是什么?【参考方案3】:

其他两个答案都是正确的。不要创建新的 AFHTTPRequestOperationManager 实例

        @interface OperateCustomerView () <WYPopoverControllerDelegate>

        AFHTTPRequestOperationManager *manager;// = [AFHTTPRequestOperationManager manager];
    
- (void)viewDidLoad 
    [super viewDidLoad];
    manager = [AFHTTPRequestOperationManager manager];

【讨论】:

以上是关于如何使用 afnetworking 取消网络请求的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 和网络错误

AFNetworking 2:取消批量请求

在 Afnetworking 2.0 中取消发布请求

AFNetworking 取消发布请求

取消已释放对象中的块请求

AFNetworking 和自动建议