【问题标题】:iPhone Web service Request TimeoutiPhone Web 服务请求超时
【发布时间】:2011-05-18 14:31:40
【问题描述】:

由于 wifi 信号较弱,我的 iphone 应用程序出现问题。我的应用程序使用 web 服务从我们的服务器中检索数据,但是当 Wifi 信号较弱时,响应永远不会返回,并且用户卡在“正在加载...”覆盖屏幕上。最后,应用程序最终崩溃。我该如何优雅地处理这种情况。有没有办法为我的网络服务调用或类似的东西设置 TimeOut?

谢谢,阿西夫。

【问题讨论】:

  • 您是如何进行这些 Web 服务调用的? NSURL连接? initWithContentsOfURL: 或类似的 NSString、NSDictionary 等?第三方库?

标签: iphone web-services timeout request


【解决方案1】:

【讨论】:

    【解决方案2】:

    您可能想了解ASIHTTPRequest,因为它的功能远不止标准 CFNetwork api。代码很简单,错误处理也很好:

    - (IBAction)grabURLInBackground:(id)sender
    {
       NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
       ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
       [request setDelegate:self];
       [request startAsynchronous];
    }
    
    - (void)requestFinished:(ASIHTTPRequest *)request
    {
       // Use when fetching text data
       NSString *responseString = [request responseString];
    
       // Use when fetching binary data
       NSData *responseData = [request responseData];
    }
    
    - (void)requestFailed:(ASIHTTPRequest *)request
    {
       NSError *error = [request error];
    }
    

    【讨论】:

      【解决方案3】:

      您可以设置 NSURLConnection 超时和一个委托来响应connection:didFailWithError: 选择器。看到这个S.O. topic.

      如果您的委托从未被调用,这是一个known issue。 唯一的解决方法似乎是将您自己的 NSTimer 设置为在一段时间后触发并取消请求。这绝对是尴尬,但它不应该那么复杂。

      如果您对超时问题背后的原因感到好奇,这似乎与 iPhone 中 3G 子系统启动缓慢有关。

      【讨论】:

      • 我已经使用 WSDL2ObjC 工具在 iphone 应用程序中使用 Web 服务。 WSDL2ObjC 创建了一个类 xMyService.m,其中包含 NSURLConnection 的以下代码,请求超时 10 秒但是当 WI-FI 信号较弱时,请求被卡住并且 10 秒的连接超时不起作用。 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:self.address cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate: operation];
      • @asif:那么,您是否尝试过更改 timeoutInterval 值?有什么改进吗?
      • 是的,我尝试了小于 10 的值,但这也不起作用。并且应用程序显示无限时间的活动指示器。
      • 如果您的应用程序无限期地显示活动指示器,这可能是因为您没有在连接超时时删除活动指示器。你到底在做什么connection:didFailWithError:
      • 活动指示器不会被移除,以防 wi-fi 信号较弱,并且响应没有返回。在正常情况下,当 wi-fi 信号强度良好时,应用程序正常工作,并且在返回响应后立即移除活动指示器。
      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多