2012-06-14 8 views
13

Quiero obtener información útil al NSError. Si imprimo [error userInfo], me sale el siguiente:¿Cómo puedo obtener más información útil de 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\""; 
} 

Quiero mostrar la última línea: "El archivo existe", pero ¿cómo puedo recogerlo a cabo?

me trataron:

localizedDescription 
localizedFailureReason 
localizedRecoverySuggestion 
localizedRecoveryOptions 
recoveryAttempter 

no de ellos muestran "Archivo existe".

Respuesta

23

Finalmente, sigo el código para una impresión NSError perfecta. Gracias @ jbat100 y @Peter Warbo, añado un poco de ellos en código:

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

¿Qué tal:

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

Sí, prensa: "error de dominio = Código NSPOSIXErrorDomain = 17 \" La operación de poda \ u2019t completarse. Existe el archivo \ "" Pero, ¿Puedo elegir "La operación no se pudo completar. El archivo existe" solo? –

+0

Qué tal: 'if ([código de error] == 17) NSLog (" La operación no se pudo completar. El archivo existe ");' –

1

Si usted busca la NSError documentation, que tiene una sección User info dictionary keys que tiene una constante definida como NSUnderlyingErrorKey (que también tiene una descripción de las teclas).

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

localizedRecoverySuggestion es muy útil. Puede obtener la cadena JSON de ella:

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

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

¡Me salvaste la vida! – marcelosalloum

+1

Más compacto: 'error.userInfo [NSUnderlyingErrorKey] .localizedDescription;' – seeker12

Cuestiones relacionadas