2012-06-14 37 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 

不显示 “文件存在”。

回答

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

是的,它按: “错误域= NSPOSIXErrorDomain码= 17 \” 的操作couldn \ U2019t完成。文件存在\“”但是,我可以挑出“操作无法完成,文件存在”吗? –

+0

[if([error code] == 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

相关问题