2012-06-14 4 views
13

Я хочу получить полезную информацию от NSError. Если я распечатать [error userInfo], я получаю следующее:Как я могу получить более полезную информацию от NSError?

{ 
    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 

Non из них показывают "Файл существует".

ответ

23

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

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

Как насчет:

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

Да, нажмите: "Error Domain = NSPOSIXErrorDomain Code = 17 \" Операция не мог \ быть завершено U2019t. Файл существует \ "" Но, могу ли я выбрать "Операция не может быть завершена? Только файл существует"? –

+0

Как насчет: 'if ([код ошибки] == 17) NSLog (« Операция не может быть завершена. Файл существует »);' –

1

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

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

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

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

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

Вы спасли мне жизнь! – marcelosalloum

+1

Более компактно: 'error.userInfo [NSUnderlyingErrorKey] .localizedDescription;' – seeker12