2012-06-14 17 views
13

Chcę uzyskać przydatne informacje od NSError. Gdybym wydrukować [error userInfo], pojawia się następujący:Jak mogę uzyskać więcej przydatnych informacji z 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\""; 
} 

chcę pokazać ostatnią linię: „plik istnieje”, ale jak mogę ją odebrać?

Próbowałem:

localizedDescription 
localizedFailureReason 
localizedRecoverySuggestion 
localizedRecoveryOptions 
recoveryAttempter 

non im pokazać "istnieje plik".

Odpowiedz

23

Na koniec podążam za kodem, aby uzyskać doskonały wydruk NSError. Dzięki @ jbat100 i @Peter Warbo, dodaję trochę na nich kodu:

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

Jak o:

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

Tak, to nacisnąć przycisk: "Error Code NSPOSIXErrorDomain Domain = = 17 \" Operacja mogłam \ U2019t być zakończone. Plik istnieje \ "" Ale, czy mogę wybrać "Operacja nie mogła zostać ukończona Plik istnieje" tylko? –

+0

Co powiesz na: 'if ([kod błędu] == 17) NSLog (" Operacja nie mogła zostać zakończona Plik istnieje ");' –

1

Jeśli spojrzeć na NSError documentation, ma sekcję User info dictionary keys który ma stałą zdefiniowaną jako NSUnderlyingErrorKey (posiada również opis klawiszy).

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

localizedRecoverySuggestion jest bardzo przydatna. można uzyskać ciąg JSON od niego:

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

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

Uratowałeś mi życie! – marcelosalloum

+1

Bardziej zwięźle: 'error.userInfo [NSUnderlyingErrorKey] .localizedDescription;' – seeker12

Powiązane problemy