问题 iOS 7 UIWebView无法加载网页


我的应用程序使用UIWebview,它在iOS 5和iOS 6中运行良好。但是,当我在Xcode 5中构建并运行相同的代码时,它不会在iOS 7中加载网页。

 - (void)webViewDidFinishLoad:(UIWebView *)webView {}
 - (void)webViewDidStartLoad:(UIWebView *)webView {}
 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {}

不调用所有委托函数。但我确实在xib文件和代码中设置了委托

self.theWebView.delegate = self;

我没有通过谷歌找到任何信息。感谢您的帮助。


9289
2017-09-22 23:37


起源

您是否已验证正在加载WebView?它在屏幕和调试器中可见吗? - bneely
我不知道你是什么意思加载了WebView。在iOS7中没有调用所有委托函数,我跟踪它,WebView不是nil。我在webViewDidStartLoad中设置了断点,并且没有调用webViewDidStartLoad,所以看起来uiwebview没有加载网页.... - Bruce Tsai
确定theWebView不是零,这就是我的要求。 - bneely
你是子类吗? UIWebView? - ThomasW


答案:


我将loadRequest方法移动到presentViewController的完成处理程序,它在iOS 5,6和7中工作:

[self presentViewController:gwvc animated:YES completion:^(void){
    [gwvc.wv loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.walkjogrun.net/about/eukanuba.html"]]];
}];

6
2017-09-30 15:26



同样,我需要将调用调用loadRequest:移入viewDidAppear。 - Willster
这对我没有帮助,但原因是我在IB中的Web视图被自动合成到_webV而不是webV。只需检查您的loadrequest中的webview是否为零。 - Henrik Erlandsson


我找到了根本原因。  也许我错误地使用了 UIWebView,但它适用于iOS5和iOS6。  我不知道为什么它在早期的iOS版本中有效...

此外,当我使用SDK 6.1构建代码时,它可以在iOS7中运行。

这是我的旧代码。

     RechargeWebPageViewController *webPageViewController;
    webPageViewController = [[  RechargeWebPageViewController alloc] initWithNibName:@"WebPage" bundle:nil];
    if (webPageViewController != nil) {
        webPageViewController.hidesBottomBarWhenPushed = YES;
        webPageViewController.delegate=self;
        [self.navigationController pushViewController:webPageViewController animated:YES];
        NSURL *url = [NSURL URLWithString:@"https://xxx.php"];

        NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
        [webPageViewController loadRequest:request];
        [request release];
   }

我感动了 loadRequest 来自 viewDidLoad 方法 ViewWillAppear 方法,然后它工作。    我想也许吧 UIWebView 在iOS7的旧代码中未正确初始化。


4
2017-09-23 10:37



我仍然在viewDidLoad中调用loadRequest,它似乎不是一个问题。 - NLemay
我的代码问题是我先调用pushViewcontroller,然后调用loadRequest。看来我们需要在ViewwillAppear或ViewdidLoad中调用loadRequest。通过这种方式,我们可以确保UIWebview已初始化并准备好接收loadRequest事件。这只是我的猜测。 - Bruce Tsai
如果将Web视图控制器推送到带动画的导航控制器上,那么我发现loadRequest需要在viewDidAppear中完成。 - Willster