Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURL连接在超时后被卡住_Ios_Timeout_Nsurlconnection - Fatal编程技术网

Ios NSURL连接在超时后被卡住

Ios NSURL连接在超时后被卡住,ios,timeout,nsurlconnection,Ios,Timeout,Nsurlconnection,我遇到了一个NSURLConnection问题,花了3天多的时间来寻找解决方案 但不幸的是,我没有一个。 这是我的代码,它位于一个专用类中,使用completehandler返回 NSURL *myUrl = [NSURL URLWithString:targetSite]; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl

我遇到了一个NSURLConnection问题,花了3天多的时间来寻找解决方案 但不幸的是,我没有一个。 这是我的代码,它位于一个专用类中,使用completehandler返回

    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,然后可以根据需要添加任意数量的网络操作,操作队列将确保它们不会超时。

您确定连接到服务器时没有问题吗。这可能是您的网络或连接到的服务器出现了问题。如果请求超时,您可能需要等待一分钟以上重试同一请求。