重新启动应用程序后,NSURLConnection始终失败

时间:2012-07-11 14:18:35

标签: ios ios5 nsurlconnection nsurlrequest

我意识到这是一个模糊的问题,但我想知道是否还有其他人观察过这个问题。这是我调用NSURLConnection

的代码
   // Get data from server
    NSString *host = @"www.hostname.com";            
    NSString *urlString = [NSString stringWithFormat:@"/theRestOfTheURL"];
    NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:host path:urlString];

    DLog(@"URL is %@", url);

    // Create the NSMutableData to hold the received data.
    // receivedData is an instance variable declared elsewhere.
    receivedData_ = [[NSMutableData data] retain];

    NSURLRequest *theRequest=[NSURLRequest requestWithURL:url
                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                                          timeoutInterval:15.0];

    // create the connection with the request
    // and start loading the data
    self.powerPlantDataConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease];

    [url release]; 

当我第一次加载应用程序时它工作正常,我可以反复调用它而没有任何问题。但如果我关闭应用程序并重新打开它,

(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

每次调用委托方法,请求超时错误消息。我有两个不同的视图控制器,我调用两个不同的URL,并且每次关闭并重新打开应用程序后都会失败。

任何人都可以想到为什么会发生这种情况的原因吗?我不知道从哪里开始寻找。什么可能是请求超时错误的原因?请求应该没有任何问题,因为它在我第一次运行应用程序时起作用。


编辑添加,似乎我的设备上只有这个问题,而不是模拟器上。

2 个答案:

答案 0 :(得分:3)

希望你分享了一些chrash日志(尤其是清晰的定义,如 [error localizedDescription]类方法..)

如你所说,它会超时(你的要求)。而且由于你创建对象的方式过于混乱,你可以使系统的工作更大。我建议在下载数据时使用GCD,特别是在像你这样的情况下,使用不同的接口和网址。

建议 您可以像这样创建您的网址对象:

   NSURL *url = [NSURL urlWithString:[NSString stringWithFormat:@"http://%@/%@?key1=%@&key2=%@", yourDomain, targetFile, value1, value2]];

答案 1 :(得分:0)

我切换到使用ASIHTTPRequest,这改善了一些事情,但是我仍然会遇到每次尝试刷新时都会出现错误的情况。我看了一下,问了一下,最终发现禁用TestFlight的电话解决了我的问题。更多信息:

ASIHTTPRequest request times out

在这里:

github.com/pokeb/asi-http-request/issues/320