如何在Objective-C中取消异步HTTP请求?

4

我正在尝试添加取消所有当前异步请求的能力,当用户离开视图或发起新请求时。我知道在哪里放置代码,但我不太确定如何实际取消请求。从我的研究中,我知道NSURLConnection有一个cancel方法,但我使用异步块调用我的请求。以下是我的代码 - 任何帮助都将不胜感激!

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"GET"];
[request setURL:[NSURL URLWithString:[kEndpointEvents stringByAppendingString:arguments]]];

//Send an asynchronous request so it doesn't pause the main thread
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

    NSHTTPURLResponse *responseCode = (NSHTTPURLResponse *)response;

    //Do stuff

}];
1个回答

1
使用方便的方法+sendAsynchronousRequest:queue:completionHandler+sendSynchronousRequest:returningResponse:error:时,无法取消正在进行的请求。
如果您想要取消请求,请在委托 NSURLConnectionDataDelegate 中实现方法,并通过回调自己构建数据。这样做将使您控制连接对象,并随时可以调用其-cancel方法。

你有什么库、教程或示例可以推荐吗? - rebello95
1
请查看以下链接:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html,https://dev59.com/O2HVa4cB1Zd3GeqPkTTo,http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example/ - Anurag
1
仅供其他人参考:经过一些研究,我最终使用了AFNetworking库。这是一个设计非常良好且更新及时的库,可以允许取消连接等更多操作。 - rebello95
@rebello95,你能分享一下关于这个库的实现或者你是如何解决这个问题的吗? - kitimenpolku
@kitimenpolku 只需要查看他们的文档和/或教程。有大量关于它的信息可供参考。 - rebello95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接