iOS 8中的NSError域检查条件失败

时间:2015-07-09 11:46:13

标签: ios if-statement nserror

我正在使用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部分。谁能告诉我它为什么会这样?

2 个答案:

答案 0 :(得分:8)

domain propertyNSString,所以你需要比较它:

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 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
    }
 }