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 Documentationdomain 值将为 @"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
    }
 }