Ios NSURL连接在超时后被卡住
我遇到了一个NSURLConnection问题,花了3天多的时间来寻找解决方案 但不幸的是,我没有一个。 这是我的代码,它位于一个专用类中,使用completehandler返回Ios NSURL连接在超时后被卡住,ios,timeout,nsurlconnection,Ios,Timeout,Nsurlconnection,我遇到了一个NSURLConnection问题,花了3天多的时间来寻找解决方案 但不幸的是,我没有一个。 这是我的代码,它位于一个专用类中,使用completehandler返回 NSURL *myUrl = [NSURL URLWithString:targetSite]; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl
NSURL *myUrl = [NSURL URLWithString:targetSite];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:timeOutInterval];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:MYBODYCONTENT];
conn = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
if(conn)
{
webData = [NSMutableData data];
}
并使用委托接收数据,它在“didReceiveResponse”、“didReceiveData”、“didFailWithError”、“ConnectiondFinishLoading”中工作良好
但是,如果请求超时,(我已经在“didFailWithError”中执行了[conn cancel])然后,在一段时间内(我没有做精确的计数,但大约1分钟) 我对同一服务器的所有新请求(再次请求)将一次又一次超时。
我做错什么了吗?
或者我应该修改代码的任何内容?
我尝试了很多解决方案,但仍然没有成功。
因此,请寻求帮助,谢谢。一个常见问题是,如果您启动了许多
NSURLConnection
请求,它只能同时运行一定数量的请求(通常为4或5)。因此,如果您启动的程序不止这些,那么它一次只能运行其中的几个程序,而所有其他程序都将被积压,等待其中一个插槽可用。遗憾的是,如果这需要一分钟以上的时间,后面的请求可能会超时
一种解决方案是将NSURLConnection
对象包装在自定义NSOperation
子类中。然后,您可以将连接添加到NSOperationQueue
,让操作队列决定何时启动连接,而不是一次启动所有连接。因此,如果您将队列的maxConcurrentOperationCount
定义为4或5,那么操作队列将不会尝试同时启动它们,从而解决NSURLConnection
超时问题
有关如何为并发操作子类化NSOperation
的背景信息,请参阅的“为并发执行配置操作”一节。有关在NSOperation
子类中包装NSURLConnection
对象的演示,请参阅
更好的是,如果您不想在这里的细节中迷失,请考虑使用,它使用操作队列解决方案(至少用于<代码> AFHTPREQUESTEPATION管理器< /代码>)。只需确保将管理器的操作队列的
maxConcurrentOperationCount
设置为4,然后可以根据需要添加任意数量的网络操作,操作队列将确保它们不会超时。您确定连接到服务器时没有问题吗。这可能是您的网络或连接到的服务器出现了问题。如果请求超时,您可能需要等待一分钟以上重试同一请求。