我已经搜索过并且没有找到解决方案,所以希望有人可以提供帮助。
我有一个用户按下按钮时调用的UIWebView。一切都很好,除非你考虑手机没有数据连接时的行为。
尝试在手机处于飞行模式或没有数据连接时第一次时打开UIWebView:
一旦分配了UIWebView并且第一次无法加载,点击链接到IBAction(调用[webView reload])的刷新按钮会导致:
如果我让应用程序继续运行并打开与设备的数据连接(例如关闭飞行模式),然后返回我的应用程序并点击刷新按钮,调用[webView reload],但是webViewDidStartLoad(以及webViewDidFinishLoad)未被调用。
以下是相关代码:
调出webView:
-(IBAction)loadWebView {
webView = [[UIWebView alloc] init];
webView.scalesPageToFit = YES;
[webView setDelegate:self];
NSString *urlAddress = @"http://google.com";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
}
重新加载:
-(IBAction)reloadWebView{
[webView reload];
NSLog(@"RELOAD");
}
webViewDidStart,DidFinish,didFailLoadWithError:
- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"START LOAD");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"FINISH LOAD");
}
- (void)webView:(UIWebView *) webView didFailLoadWithError:(NSError *)error
{
NSLog(@"DID FAIL");
}
思想?
答案 0 :(得分:2)
检查您是否应该尝试加载网页的好方法是使用Reachability。
NetworkStatus currentStatus = [[Reachability reachabilityForInternetConnection]
currentReachabilityStatus];
if(currentStatus == kReachableViaWWAN) // 3G
else if(currentStatus == kReachableViaWifi) // ...wifi
else if(currentStatus == kNotReachable) // no connection currently possible
如果在没有连接的情况下甚至没有启动webView
加载,您可以完全避免这种情况。
修复奇怪的行为:在刷新方法中尝试检查它是否已加载任何内容,如果没有,则在那里调用loadRequest:requestObj
。例如:
- (IBAction)reloadWebView {
if(webView.request != nil)
[webView reload];
else {
// reconstruct requestObj here, or use a class member
[webView loadRequest:requestObj];
}
NSLog(@"RELOAD");
}
答案 1 :(得分:1)
我确实遇到了相同的问题:
UIWebView
,依次调用以下方法:
-webView:shouldStartLoadWithRequest:navigationType:
-webViewDidStartLoad:
-webView:didFailLoadWithError
UIWebView
的{{1}}方法,没有调用委托方法,所以我甚至无法获得超时通知。我的解决方案是:
-reload
不是request
第一次)。nil
重新加载当前网址而不是loadRequest:
。其他一些类似问题: