NSURLConnection IOS 3G问题

时间:2012-10-28 14:53:32

标签: iphone nsurlconnection 3g-network

我在我的应用程序中使用了NSURLConnection(异步),它在wifi(iOS5和iOS6)上工作正常。但它创造了3G的问题。当我运行我的应用3G连接时,我在didReceiveData方法中没有得到任何数据。

我已经在我的委托方法中添加了日志,但在使用3G时,请求正在超时。可能是什么问题。

编辑: 在服务器端 - >它显示我的请求已发送到服务器&服务器也已将响应发送给客户端。

编辑2:

我写的代码如下。

NSURL *url = [NSURL URLWithString:@"someURL"];

NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url     
 cachePolicy:NSURLRequestUseProtocolCachePolicy                                   
 timeoutInterval:40.0];

//[req setHTTPShouldUsePipelining:YES];

[req setValue:@"x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"someValue" forHTTPHeaderField:@"Accept"];
[req setValue:@"myCrdentails" forHTTPHeaderField:@"Authorization"];
[req setHTTPMethod:@"GET"];

[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];

响应标题如下

< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Content-Type: text/event-stream; charset=utf-8
< Connection: keep-alive
< Transfer-Encoding: chunked

4 个答案:

答案 0 :(得分:1)

经过几个小时的努力,我终于找到了一个有效的解决方案。 NSMutableURLRequest 对象有一种方法来设置是否允许蜂窝网络:

[req setAllowsCellularAccess:YES];

即使 NSURLRequest 类型的对象默认值 YES ,它也解决了我的问题。

希望这会帮助像我这样的人在解决这个问题并最终解决这个问题。

答案 1 :(得分:0)

尝试使用Reachability框架并检查它是否为3G返回false。如果确实返回true并且仍然超时,请尝试同步模型,看看会发生什么。可能是连接工作正常,但有些东西可以拦截你的回调。

答案 2 :(得分:0)

这是https吗?我想知道是否可能会出现一些SSL验证失败...你还尝试过从卷曲中查询这个吗?如果蜂窝运营商代理并且没有为您提供有效数据,或者其IP相关(黑名单,关闭端口等),那么您可能会得到不同的响应。我会用curl测试一下。无论是从监狱破坏的电话,还是拴在一起。

答案 3 :(得分:0)

NSURLConnection超过3g的问题是超时,基本上不在你手中,

如果要将数据上传或流式传输到服务器并且数据处理的时间超过NSURLConnection时间阈值或连接速度太慢,则连接将关闭并返回NULL个数据..因为连接进入IDLE状态...

要解决此类问题,您需要让Web服务发送空包“空格” 您将看到每个数据包到达时调用didReceiveData ..

这些空格不会影响receivedData ..在我的情况下,回复是JSON,我使用JSonKit来解析它,...

希望它会帮助某人......