1

我有这组代码大约一个小时前运行良好。然后当我试图再次启动它几分钟后,UIWebView 只显示一个白屏。但是如果现在我屏蔽了 -(bool) 方法,就会出现 viewDidLoad。(用NSLog测试)请问代码发生了什么?它正在工作,但突然停止运行。

.m

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

    NSString *titleString = @"Error Loading Page";
    NSString *messageString = [error localizedDescription];
    NSString *moreString = [error localizedFailureReason] ?
    [error localizedFailureReason] :
    NSLocalizedString(@"Try typing the URL again.", nil);
    messageString = [NSString stringWithFormat:@"%@. %@", messageString, moreString];

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:titleString
                                                        message:messageString delegate:self
                                              cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
    [alertView show];

}

如果我实现上述方法,应用程序在打开 UIWebView 时会不断弹出错误域错误 -999 不停。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *currentURL = [[request URL] absoluteString];
    NSRange range1= [currentURL rangeOfString:@"news"];
    NSRange range2= [currentURL rangeOfString:@"pdf"];
    if (range1.location == NSNotFound)
    {
        NSURL *url = [NSURL URLWithString:@"http://www.imc.jhmi.edu/news.html"];
        [webView loadRequest:[NSURLRequest requestWithURL:url]];

        return YES;
    }
    if(range2.location==NSNotFound)
    {
        NSURL * url = [NSURL URLWithString:@"http://www.imc.jhmi.edu/news.html"];
        [webView loadRequest:[NSURLRequest requestWithURL:url]];
        return YES;
    }

    return NO;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    webView.scalesPageToFit=YES;
    webView.delegate = self;

    NSString *urlAddress = @"http://www.imc.jhmi.edu/news.html";
    NSURL *url =[NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];
    NSLog(@"sadfasdf");
}

.h @interface ViewController : UIViewController{ IBOutlet UIWebView*webView; }

@property(nonatomic,strong) UIWebView*webView;

@end
4

2 回答 2

1

加载请求时,委托方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

会被调用。

在这种方法中,您尝试无限次重新加载同一页面。

错误域=NSURLErrorDomain 代码=-999 “操作无法完成。(NSURLErrorDomain 错误-999。)” UserInfo=0xe203e80 {NSErrorFailingURLKey= http://www.imc.jhmi.edu/news.html , NSErrorFailingURLStringKey= http ://www.imc.jhmi.edu/news.html }

我尝试了您的代码并收到此错误。如果在 WebView 的上一个请求完成之前发出另一个请求,则可能会出现此错误。所以尽量避免在委托方法中重复加载请求的那些条件。

if(range2.location==NSNotFound)

这个条件永远成立。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *currentURL = [[request URL] absoluteString];
    NSRange range1= [currentURL rangeOfString:@"news"];
    if (range1.location == NSNotFound)
    {
        NSURL *url = [NSURL URLWithString:@"http://www.imc.jhmi.edu/news.html"];
        [webView loadRequest:[NSURLRequest requestWithURL:url]];
        return YES;
    }

    return YES;
}
于 2012-06-28T04:08:50.627 回答
0

UIWebView 的委托方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request     navigationType:(UIWebViewNavigationType)navigationType{
}

如果 Web 视图应该开始加载内容,则返回 YES,否则返回 NO。当您调用时,该方法会在 viewDidLoad 方法中调用:

[webView loadRequest:requestObj];

在委托方法中,您再次调用相同的方法:

[webView loadRequest:[NSURLRequest requestWithURL:url]];

这变成了一次又一次地调用委托方法并形成无限循环。每次 loadRequest 都会发生这种情况,但在加载之前,再次调用相同的 loadRequest,形成循环。

此方法无需 loadRequest,只需根据您需要的条件返回 YES 或 NO。

于 2012-06-28T04:28:45.247 回答