2016-06-18 5 views
2

У меня есть следующий кодDetect когда WKWebview не может обработать запрос

NSURL *nsurl = [NSURL urlWithString:@"http://url.that.does.not.exist.com"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl]; 
WKWebViewConfiguration *config = [WKWebViewConfiguration new]; 
WKWebView *wv = [[WKWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds] configuration:config]; 
wv.navigationDelegate = self; 

И делегат:

- (void)webView:(WKWebView *)webView 
    decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse 
         decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { 
... 
} 

работает отлично, и я могу поймать ошибки, когда не может быть загружен (404 и т.д.). Но как я могу поймать ошибку, когда nsurl был чем-то, с чем WKWebView не может справиться?

Например:

NSURL *nsurl = [NSURL urlWithString:@"nacho"]; 

приведет к пустой странице не метод делегата вызывается. Как я могу обработать эту ошибку? (Я проверил на этом iPhone SDK: Check validity of URLs with NSURL not working?, но мне интересно, если есть что-нибудь лучше, чем регулярное выражение?)

ответ

1

Вы можете попробовать и посмотреть, если URL может быть запрошены так:

NSURL *nsurl = [NSURL urlWithString:@"nacho"]; 

if([NSURLConnection canHandleRequest:[NSURLRequest requestWithURL: nsurl]]){ 
    NSLog(@"URL can be loaded"); 
}else{ 
    NSLog(@"URL cannot be loaded"); 
} 
+0

Это работает !. Именно в NSURLConnection.h есть большой «/ *** DEPRECATED: класс NSURLConnection больше не должен использоваться. NSURLSession - это замена NSURLConnection *** /« Интересно, есть ли лучший (не устаревший) подход. .. – nacho4d

+0

в соответствии с яблоком https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/index.html#//apple_ref/occ/cl/NSURLConnection ** NSURLConnection * * не полностью УДАЛЕНО. все еще существуют НЕОПРЕДЕЛЕННЫЕ методы – Karim