2011-05-18 101 views
1

我有我的iPhone应用程序由于弱WiFi信号问题。我的应用程序使用webservice从我们的服务器中取消数据,但是当Wifi信号很弱时,响应永远不会回来,用户会停留在“正在加载...”覆盖屏幕上。最后,应用程序崩溃了。我怎样才能妥善处理这种情况。有没有办法为我的web服务调用设置TimeOut或类似的东西?iPhone Web服务请求超时

谢谢,阿西夫。

+1

你是如何进行这些Web服务调用的? NSURLConnection的? 'initWithContentsOfURL:'或类似的NSString,NSDictionary,或类似的?第三方库? – Anomie 2011-05-18 14:37:48

回答

0

您可以设置NSURLConnection的超时和委托给connection:didFailWithError:选择作出回应。看到这个S.O. topic.

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

如果你是好奇与超时问题背后的原因,似乎与在iPhone 3G的子系统的慢启动。

+0

我已经使用WSDL2ObjC工具在iPhone应用程序中使用Web服务。 WSDL2ObjC外币一类xMyService.m包含用于NSURLConnection的所述follwing代码与请求超时10秒 但当WI-FI信号弱,则该请求得到10秒的stucked和连接超时不起作用。 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:self.address cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]; NSURLConnection的*连接= [[NSURLConnection的页头] initWithRequest:请求委托:操作]; – Asif 2011-05-19 13:59:38

+0

@asif:所以,你有没有试图改变timeoutInterval值?任何改进? – sergio 2011-05-19 14:20:28

+0

是的,我试过小于10的值,但这也行不通。并且应用程序显示无限期的活动指示器。 – Asif 2011-05-20 04:37:44

0

你可能想了解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]; 
} 
+1

帕斯卡甚至更快提示ASIHTTPRequest ... – alex 2011-05-18 14:55:05