iOS 8 中的 NSError 域检查条件失败
NSError domain check condition fails in iOS 8
我正在为 iOS 8 台设备使用 WKWebView
并且想检查发生的错误是否是 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 循环并进入 else 部分。谁能告诉我这是为什么?
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];
}
根据 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
}
}
我正在为 iOS 8 台设备使用 WKWebView
并且想检查发生的错误是否是 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 循环并进入 else 部分。谁能告诉我这是为什么?
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];
}
根据 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
}
}