我试图弄清楚如何最好地确定iOS中是否有可用的页面。我有一个可以看到URL请求代码的WKWebView,它适用于404,500等。但是,当目标URL的服务器可能无法确定如何处理对URL的请求时沮丧我的WKWebView开始导航委托方法触发,然后什么都没有。我的网络请求似乎消失了。
例如,Chrome会返回一条消息,说明"无法访问此网站 无法找到chess.math.science.google.com的服务器IP地址。"我在didStartProvisionalNavigation
委托方法中包含了iOS Reachability类,并且说该URL应该可以通过WIFI访问,虽然不是错误的,但不会检查URL是否有任何要返回的内容。
App Log:
2018-03-23 16:28:54.142105-0400 MyApp[1245:774884] INTERNET REACHABLE
2018-03-23 16:28:54.272582-0400 MyApp[1245:774884] WKWEBVIEW DID START NAVIGATION
2018-03-23 16:28:54.274085-0400 MyApp[1245:774884] NETWORK STATUS FOR URL chess.math.science.google.com: 2
(lldb) po netStatus
ReachableViaWiFi
代码:
-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
NSLog(@"WKWEBVIEW DID START NAVIGATION");
Reachability* tinyReach = [Reachability reachabilityWithHostname:webView.URL.absoluteString];
NetworkStatus netStatus = [tinyReach currentReachabilityStatus];
NSLog(@"NETWORK STATUS FOR URL %@: %li", webView.URL.absoluteString, netStatus);
if(netStatus == NotReachable) {
NSLog(@"NOT REACHABLE");
答案 0 :(得分:0)
您需要实现WKNavigationDelegate的webView:didFailProvisionalNavigation:withError:
方法。 (参见https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455637-webview?language=objc)然后在Web视图中设置您的代理:
self.webView.navigationDelegate = myDelegate; // maybe self
此方法报告网络错误,包括超时错误和DNS解析错误。它们通常有一个error.domain = NSURLErrorDomain(NSString)和来自NSURLErrorDomain枚举的error.code。
例如,如果服务器由于某种原因没有响应60秒,您将获得NSURLErrorTimedOut,还有许多其他可能的错误,如NSURLErrorCannotConnectToHost和NSURLErrorNotConnectedToInternet。 The list is here或NSURLError.h标题。
P.S。 Reachability API更适合暗示用户可能出错,而不是将其作为事实的主要来源。它总是更好(并且由Apple工程师提供建议)尝试运行请求并获得真正的错误,而不是依赖于某些可达性指示。