【问题标题】:NSURLConnection always failing after restarting app重新启动应用程序后 NSURLConnection 总是失败
【发布时间】:2012-07-11 14:18:34
【问题描述】:

我意识到这是一个模糊的问题,但我想知道是否有其他人观察到这一点。这是我调用 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,并且每次关闭并重新打开应用程序后它们都会失败。

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


编辑补充说,我似乎只在我的设备上遇到了这个问题,而不是在模拟器上。

【问题讨论】:

    标签: ios ios5 nsurlconnection nsurlrequest


    【解决方案1】:

    希望你分享了一些 chrash 日志(尤其是具有明确定义的 [error localizedDescription]类方法..)

    正如您所说,它将超时(您的请求)。而且由于您创建对象的方式太杂乱,因此您的系统工作量更大。我建议在下载数据时使用GCD,尤其是在像您这样的情况下,具有不同的界面和网址..

    建议 你可以像这样创建你的 url 对象:

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

    【讨论】:

    • 谢谢。没有崩溃日志,因为应用程序没有崩溃,只有 NSURLConnection 失败。错误的本地化描述只是“请求超时”或类似的东西。我会按照您建议的方式创建我的 url 方案,看看它是否有所作为。
    • 可能不会有什么不同,但它会使用更少的内存。试试GCD,如果需要code&sample请再写。
    【解决方案2】:

    我转而使用 ASIHTTPRequest,这改进了一些事情,但我仍然会遇到每次尝试刷新时都会出现超时错误的情况。我环顾四周,四处询问,最终发现禁用对 TestFlight 的调用解决了我的问题。更多信息在这里:

    ASIHTTPRequest request times out

    这里:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2016-11-20
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      相关资源
      最近更新 更多