我有我的iPhone应用程序由于弱WiFi信号问题。我的应用程序使用webservice从我们的服务器中取消数据,但是当Wifi信号很弱时,响应永远不会回来,用户会停留在“正在加载...”覆盖屏幕上。最后,应用程序崩溃了。我怎样才能妥善处理这种情况。有没有办法为我的web服务调用设置TimeOut或类似的东西?iPhone Web服务请求超时
谢谢,阿西夫。
我有我的iPhone应用程序由于弱WiFi信号问题。我的应用程序使用webservice从我们的服务器中取消数据,但是当Wifi信号很弱时,响应永远不会回来,用户会停留在“正在加载...”覆盖屏幕上。最后,应用程序崩溃了。我怎样才能妥善处理这种情况。有没有办法为我的web服务调用设置TimeOut或类似的东西?iPhone Web服务请求超时
谢谢,阿西夫。
您可以设置NSURLConnection的超时和委托给connection:didFailWithError:
选择作出回应。看到这个S.O. topic.
如果你的委托永远不会被调用,这是某种方式known issue。 唯一的解决方法似乎是设置自己的NSTimer在一段时间后触发并取消请求。这绝对是尴尬的,但它不应该那么复杂。
如果你是好奇与超时问题背后的原因,似乎与在iPhone 3G的子系统的慢启动。
我已经使用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
@asif:所以,你有没有试图改变timeoutInterval值?任何改进? – sergio 2011-05-19 14:20:28
是的,我试过小于10的值,但这也行不通。并且应用程序显示无限期的活动指示器。 – Asif 2011-05-20 04:37:44
尝试使用ASIHTTP LIB
你可能想了解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];
}
帕斯卡甚至更快提示ASIHTTPRequest ... – alex 2011-05-18 14:55:05
你是如何进行这些Web服务调用的? NSURLConnection的? 'initWithContentsOfURL:'或类似的NSString,NSDictionary,或类似的?第三方库? – Anomie 2011-05-18 14:37:48