簡體   English   中英

如何從 NSError 獲取更多有用的信息?

[英]How can I get more useful information from NSError?

我想從NSError獲取一些有用的信息。 如果我打印出[error userInfo] ,我會得到以下信息:

{
    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

他們都沒有顯示“文件存在”。

最后,我按照代碼進行完美的 NSError 打印。 謝謝@jbat100 和@Peter Warbo,我在他們上面加了一點代碼:

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

怎么樣:

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

如果您查找NSError 文檔,它有一個User info dictionary keys部分,其中有一個定義為 NSUnderlyingErrorKey 的常量(它還具有鍵的描述)。

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

localizedRecoverySuggestion 非常有用。 您可以從中獲取 JSON 字符串:

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

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

我使用此代碼是為了查看所有潛在錯誤(iOS 14.5):

NSError *uerror = [error.userInfo objectForKey:@"NSUnderlyingError"];
while(uerror!=nil) {
    NSLog(@"%ld - %@",uerror.code,uerror.localizedDescription);
    uerror = [uerror.userInfo objectForKey:@"NSUnderlyingError"];
}

例子:

為了探索- (void)request:(SKRequest *)request didFailWithError:(NSError *)error如果沒有互聯網連接中的原因,德語本地化的輸出是:

500 - Unhandled exception
203 - Bag Load Failed
203 - Bag Load Failed
203 - Bag Load Failed
-1009 - Es besteht anscheinend keine Verbindung zum Internet.
-1009 - Der Vorgang konnte nicht abgeschlossen werden.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM