【问题标题】:How can I get more useful information from NSError?如何从 NSError 获得更多有用的信息?
【发布时间】:2012-06-17 05:43:28
【问题描述】:

我想从NSError 那里得到一些有用的信息。 如果我打印出[error userInfo],我会得到以下信息:

{
    NSFilePath = "/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/08260B6A-4D65-48DF-ADD1-FFC8750081E8/Documents/abc";
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=17 \"The operation couldn\U2019t be completed. File exists\"";
}

我想显示最后一行:“文件存在”,但我怎样才能把它挑出来?

我试过了:

localizedDescription
localizedFailureReason
localizedRecoverySuggestion
localizedRecoveryOptions
recoveryAttempter

没有一个显示“文件存在”。

【问题讨论】:

    标签: ios nserror


    【解决方案1】:

    怎么样:

    NSDictionary *userInfo = [error userInfo];
    NSString *error = [userInfo objectForKey:@"NSUnderlyingError"];
    NSLog(@"The error is: %@", error);
    

    【讨论】:

    • 是的,它按:"Error Domain=NSPOSIXErrorDomain Code=17 \"操作无法完成\U2019。文件存在\"" 但是,我可以只选择“操作无法完成。文件存在”吗?
    • 怎么样:if([error code] == 17) NSLog("The operation couldn't be completed. File exists");
    【解决方案2】:

    如果您查找 NSError documentation,它有一个 User info dictionary keys 部分,其中有一个定义为 NSUnderlyingErrorKey 的常量(它还有键的描述)。

    NSDictionary *userInfo = [error userInfo];
    NSError *underlyingError = [userInfo objectForKey:NSUnderlyingErrorKey];
    NSString *underlyingErrorDescription = [underlyingError localizedDescription];
    

    【讨论】:

      【解决方案3】:

      最后,我遵循完美的 NSError 打印代码。 谢谢@jbat100 和@Peter Warbo,我在他们上面加了一点代码:

          NSDictionary *userInfo = [error userInfo];
          NSString *errorString = [[userInfo objectForKey:NSUnderlyingErrorKey] localizedDescription];
      

      【讨论】:

        【解决方案4】:

        localizedRecoverySuggestion 非常有用。 您可以从中获取 JSON 字符串:

        NSString *JSON = [[error userInfo] valueForKey:NSLocalizedRecoverySuggestionErrorKey] ;
        
                    NSError *aerror = nil;
                    NSDictionary *json = [NSJSONSerialization JSONObjectWithData: [JSON dataUsingEncoding:NSUTF8StringEncoding]
                                                                         options: NSJSONReadingMutableContainers
                                                                           error: &aerror];
        

        【讨论】:

        • 更简洁:error.userInfo[NSUnderlyingErrorKey].localizedDescription;
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多