【问题标题】:NSError domain check condition fails in iOS 8 [duplicate]iOS 8中的NSError域检查条件失败[重复]
【发布时间】:2015-09-27 18:30:14
【问题描述】:

我在 iOS 8 设备上使用 WKWebView 并想检查发生的错误是否是 NSURLErrorDomain 然后我想做一些更改,直到现在,我已经添加了下面的代码,但不知何故编译器进入了 else 部分,现在知道为什么了。

- (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 部分。谁能告诉我这是为什么?

【问题讨论】:

  • 肯定是指。?尝试打印并检查域类型。
  • 我的意思是,它是'NSURLErrorDomain'
  • domain 错误属性是一个 NSString。所以isEqualToString: 而不是==
  • 试试 Glorfindel 的答案,它会起作用。

标签: ios if-statement nserror


【解决方案1】:

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

【讨论】:

  • 域属性是 NSString。但是 NSURLErrorDomain 的属性是 int。那么它是如何工作的..请检查你的答案..
  • 不,NSURLErrorDomain 也是 NSString
  • 这确实有效,谢谢@Glorfindel
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2011-11-17
    相关资源
    最近更新 更多