我在我的应用程序中使用了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
答案 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
来解析它,...
希望它会帮助某人......