2012-06-28 3 views
1

У меня есть этот код, который работал нормально около часа или около того. Затем, когда я попытался запустить его еще несколько минут назад, UIWebView просто отображает белый экран. Но если теперь я заблокировал метод - (bool), появится viewDidLoad. (проверено с NSLog) Могу ли я спросить, что произошло с кодом? Он работал и внезапно прекратил функционировать.UIWebView симулятор внезапно не работает

.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 
+0

ошибка домена ошибка -999 –

ответ

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; 
} 
+0

да, я замечаю это. Но если я удалил область range2, веб-просмотр все равно не загружается.только если я удалю все и оставлю это только как «return yes», тогда веб-просмотр загрузится. –

+0

. Пожалуйста, конвертируйте этот метод делегата точно так же, как код в моем ответе, это сработало для меня. :) – Neo

+0

Кажется, перестает работать, если я поставлю другой оператор if для моего диапазона2. но отлично работать, если оставить его только как range1 –

0

Метод Делегат UIWebView:

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

возвращает YES, если веб-вид должен начать загрузку содержимого в противном случае она возвращает NO. Метод вызывается в методе viewDidLoad при вызове:

[webView loadRequest:requestObj]; 

И в методе делегата вы снова вызова тот же метод:

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

Это превращается в вызов методов делегата называться снова и снова и образуют бесконечный цикл. Это происходит каждый раз, когда loadRequest, но до его загрузки, тот же loadRequest вызывается снова, образуя цикл.

В этом методе нет необходимости загружатьRequest, просто верните YES или NO для необходимых условий.

Смежные вопросы