我正在使用WKWebView
用于iOS 8设备,并想检查错误是否发生NSURLErrorDomain
然后我想做一些更改,直到现在,我已经添加了以下代码,但不知何故编译器进入其他部分,现在确定原因。
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
if ( [error domain] == NSURLErrorDomain )
{
//code here
}
else
{
//But compiler always comes here
}
}
我得到的错误是' NSURLErrorDomain',但编译器没有执行if loop并进入else部分。谁能告诉我它为什么会这样?
答案 0 :(得分:8)
domain
property是NSString
,所以你需要比较它:
if ([[error domain] isEqualToString:NSURLErrorDomain]) {
要了解Apple的开发人员如何处理此问题,请查看下面的代码,该代码是从Error Handling Programming Guide复制的,清单2-3:
NSString *errorMsg;
if ([[error domain] isEqualToString:NSURLErrorDomain]) {
switch ([error code]) {
case NSURLErrorCannotFindHost:
errorMsg = NSLocalizedString(@"Cannot find specified host. Retype URL.", nil);
break;
case NSURLErrorCannotConnectToHost:
errorMsg = NSLocalizedString(@"Cannot connect to specified host. Server may be down.", nil);
break;
case NSURLErrorNotConnectedToInternet:
errorMsg = NSLocalizedString(@"Cannot connect to the internet. Service may not be available.", nil);
break;
default:
errorMsg = [error localizedDescription];
break;
}
} else {
errorMsg = [error localizedDescription];
}
答案 1 :(得分:0)
根据Apple Documentation,domain
值将为@"NSURLErrorDomain"
,其中enum
定义的错误代码以NSURLErrorXxx
开头。
因此你想要:
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
if ([[error domain] isEqualToString:@"NSURLErrorDomain"] &&
[error code] == NSURLErrorTimedOut ) // for example
{
// Handle timeout
}
else
{
// Some other error
}
}