Подтвердить что ты не робот

Как я могу получить более полезную информацию от NSError?

Я хочу получить полезную информацию от 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

Без них отображается "Файл существует".

4b9b3361

Ответ 1

Наконец, я следую за кодом для идеальной печати NSError. Спасибо @jbat100 и @Peter Warbo, я немного добавлю к ним код:

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

Ответ 2

Как насчет:

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

Ответ 3

Если вы посмотрите документацию NSError, у него есть раздел User info dictionary keys, который имеет константу, определенную как NSUnderlyingErrorKey (в ней также есть описание для ключей).

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

Ответ 4

localizedRecoverySuggestion очень полезен. Вы можете получить строку JSON:

NSString *JSON = [[error userInfo] valueForKey:NSLocalizedRecoverySuggestionErrorKey] ;

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