2012-06-14 16 views
13

Voglio ottenere alcune informazioni utili da NSError. se stampo fuori [error userInfo], ottengo il seguente:Come posso ottenere più informazioni utili da 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\""; 
} 

voglio mostrarvi l'ultima riga: "Il file esiste", ma come posso ritirarlo fuori?

ho provato:

localizedDescription 
localizedFailureReason 
localizedRecoverySuggestion 
localizedRecoveryOptions 
recoveryAttempter 

non di loro mostrano "Il file esiste".

risposta

23

Infine, seguo il codice per la perfetta stampa NSError. Grazie @ jbat100 e @Peter Warbo, aggiungo un po 'su di loro codice:

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

ne dite:

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

Sì, premere: "Errore Dominio = NSPOSIXErrorDomain Codice = 17 \" L'operazione couldn \ u2019t essere completata. Il file esiste \ "" Ma, posso selezionare "L'operazione non può essere completata. Il file esiste" solo? –

+0

Come su: 'if ([codice errore] == 17) NSLog (" L'operazione non può essere completata. File esiste ");' –

1

Se guardi in alto il NSError documentation, ha una sezione User info dictionary keys che ha una costante definita come NSUnderlyingErrorKey (ha anche una descrizione per le chiavi).

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

localizedRecoverySuggestion è molto utile. È possibile ottenere la stringa JSON da esso:

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

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

Mi hai salvato la vita! – marcelosalloum

+1

Più compatto: 'error.userInfo [NSUnderlyingErrorKey] .localizedDescription;' – seeker12

Problemi correlati