iOS NSError詳解 NSError錯誤code對照表 自定義族购、定制NSError 一看就懂

一蓬豁、NSError是系統(tǒng)錯誤信息類

//兩種初始化方法:其中见坑,domain 不能為空 dict可以為空

  • (instancetype)initWithDomain:(NSErrorDomain)domain code:(NSInteger)code userInfo:(nullable NSDictionary *)dict;
  • (instancetype)errorWithDomain:(NSErrorDomain)domain code:(NSInteger)code userInfo:(nullable NSDictionary *)dict;

@property (readonly, copy) NSErrorDomain domain;//錯誤域

錯誤域主要有四個,對于Carbon框架的Error扰才,歸于OSStatus domain(NSOSStatusErrorDomain)允懂,對于POSIX error,歸于NSPOSIXErrorDomain衩匣,而對于我們的iOS開發(fā)蕾总,一般使用NSCocoaErrorDomain粥航。NSError.h定義了四個domain

{

// Predefined domain for errors from most AppKit and Foundation APIs.
FOUNDATION_EXPORT NSErrorDomain const NSCocoaErrorDomain;

// Other predefined domains; value of "code" will correspond to preexisting values in these domains.
FOUNDATION_EXPORT NSErrorDomain const NSPOSIXErrorDomain;
FOUNDATION_EXPORT NSErrorDomain const NSOSStatusErrorDomain;
FOUNDATION_EXPORT NSErrorDomain const NSMachErrorDomain;

}

@property (readonly) NSInteger code;//錯誤代碼

@property (readonly, copy) NSDictionary *userInfo;//錯誤信息

@property (readonly, copy) NSString *localizedDescription;//獲取本地化描述

@property (nullable, readonly, copy) NSString *localizedFailureReason;//獲取失敗原因

@property (nullable, readonly, copy) NSString *localizedRecoverySuggestion;//獲取恢復建議

@property (nullable, readonly, copy) NSArray<NSString *> *localizedRecoveryOptions;本地恢復建議

@property (nullable, readonly, strong) id recoveryAttempter;

@property (nullable, readonly, copy) NSString *helpAnchor;

預定義的userinfo鍵名

NSString *const NSUnderlyingErrorKey;//推薦的標準方式,通用鍵
NSString *const NSLocalizedDescriptionKey; // 詳細描述鍵
NSString *const NSLocalizedFailureReasonErrorKey; // 失敗原因鍵
NSString *const NSLocalizedRecoverySuggestionErrorKey; //恢復建議鍵
NSString *const NSLocalizedRecoveryOptionsErrorKey; // 恢復選項鍵

//其他鍵

NSString *const NSRecoveryAttempterErrorKey;
NSString *const NSHelpAnchorErrorKey;
NSString *const NSStringEncodingErrorKey ;
NSString *const NSURLErrorKey;
NSString *const NSFilePathErrorKey;

用法示例:

NSDictionary *userInfo1 = [NSDictionary dictionaryWithObjectsAndKeys:@"由于文件不存在生百,無法打開", NSLocalizedDescriptionKey, @"失敗原因:文件不存在", NSLocalizedFailureReasonErrorKey, @"恢復建議:請創(chuàng)建該文件",NSLocalizedRecoverySuggestionErrorKey,nil];

NSError *error = [[NSError alloc] initWithDomain:NSCocoaErrorDomain code:4 userInfo:userInfo1];//此處code是4递雀,對照下面對照表4代表文件不存在。userinfo傳userinfo1 查看自定義打印蚀浆。userinfo傳nil缀程,查看本地化描述。

NSLog(@"========%@",[error localizedDescription]);
NSLog(@"========%@",[error localizedFailureReason]);
NSLog(@"========%@",[error localizedRecoverySuggestion]);

二市俊、NSError錯誤code對照表

Foundation Constants Reference
NSError Codes

NSError codes in the Cocoa error domain.

enum {
NSFileNoSuchFileError = 4,
NSFileLockingError = 255,
NSFileReadUnknownError = 256,
NSFileReadNoPermissionError = 257,
NSFileReadInvalidFileNameError = 258,
NSFileReadCorruptFileError = 259,
NSFileReadNoSuchFileError = 260,
NSFileReadInapplicableStringEncodingError = 261,
NSFileReadUnsupportedSchemeError = 262,
NSFileReadTooLargeError = 263,
NSFileReadUnknownStringEncodingError = 264,
NSFileWriteUnknownError = 512,
NSFileWriteNoPermissionError = 513,
NSFileWriteInvalidFileNameError = 514,
NSFileWriteInapplicableStringEncodingError = 517,
NSFileWriteUnsupportedSchemeError = 518,
NSFileWriteOutOfSpaceError = 640,
NSFileWriteVolumeReadOnlyError = 642m
NSKeyValueValidationError = 1024,
NSFormattingError = 2048,
NSUserCancelledError = 3072,

NSFileErrorMinimum = 0,
NSFileErrorMaximum = 1023,
NSValidationErrorMinimum = 1024,
NSValidationErrorMaximum = 2047,
NSFormattingErrorMinimum = 2048,
NSFormattingErrorMaximum = 2559,

NSPropertyListReadCorruptError = 3840,
NSPropertyListReadUnknownVersionError = 3841,
NSPropertyListReadStreamError = 3842,
NSPropertyListWriteStreamError = 3851,
NSPropertyListErrorMinimum = 3840,
NSPropertyListErrorMaximum = 4095

NSExecutableErrorMinimum = 3584,
NSExecutableNotLoadableError = 3584,
NSExecutableArchitectureMismatchError = 3585,
NSExecutableRuntimeMismatchError = 3586,
NSExecutableLoadError = 3587,
NSExecutableLinkError = 3588,
NSExecutableErrorMaximum = 3839,

}
URL Loading System Error Codes

These values are returned as the error code property of an NSError object with the domain “NSURLErrorDomain”.

typedef enum
{
NSURLErrorUnknown = -1,
NSURLErrorCancelled = -999,
NSURLErrorBadURL = -1000,
NSURLErrorTimedOut = -1001,
NSURLErrorUnsupportedURL = -1002,
NSURLErrorCannotFindHost = -1003,
NSURLErrorCannotConnectToHost = -1004,
NSURLErrorDataLengthExceedsMaximum = -1103,
NSURLErrorNetworkConnectionLost = -1005,
NSURLErrorDNSLookupFailed = -1006,
NSURLErrorHTTPTooManyRedirects = -1007,
NSURLErrorResourceUnavailable = -1008,
NSURLErrorNotConnectedToInternet = -1009,
NSURLErrorRedirectToNonExistentLocation = -1010,
NSURLErrorBadServerResponse = -1011,
NSURLErrorUserCancelledAuthentication = -1012,
NSURLErrorUserAuthenticationRequired = -1013,
NSURLErrorZeroByteResource = -1014,
NSURLErrorCannotDecodeRawData = -1015,
NSURLErrorCannotDecodeContentData = -1016,
NSURLErrorCannotParseResponse = -1017,
NSURLErrorFileDoesNotExist = -1100,
NSURLErrorFileIsDirectory = -1101,
NSURLErrorNoPermissionsToReadFile = -1102,
NSURLErrorSecureConnectionFailed = -1200,
NSURLErrorServerCertificateHasBadDate = -1201,
NSURLErrorServerCertificateUntrusted = -1202,
NSURLErrorServerCertificateHasUnknownRoot = -1203,
NSURLErrorServerCertificateNotYetValid = -1204,
NSURLErrorClientCertificateRejected = -1205,
NSURLErrorClientCertificateRequired = -1206,
NSURLErrorCannotLoadFromNetwork = -2000,
NSURLErrorCannotCreateFile = -3000,
NSURLErrorCannotOpenFile = -3001,
NSURLErrorCannotCloseFile = -3002,
NSURLErrorCannotWriteToFile = -3003,
NSURLErrorCannotRemoveFile = -3004,
NSURLErrorCannotMoveFile = -3005,
NSURLErrorDownloadDecodingFailedMidStream = -3006,
NSURLErrorDownloadDecodingFailedToComplete = -3007
}

三杨凑、自定義NSError

系統(tǒng)的NSError是可以自己定制的,以下提供代碼來實現并表示如何使用:

YXError.h 與 YXError.m

[objc] view plaincopy

<embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_4" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. //

  2. // YXError.h

  3. // CustomYXError

  4. //

  5. // Copyright (c) 2014年 Y.X. All rights reserved.

  6. //

  7. import <Foundation/Foundation.h>

  8. // 自行添加錯誤碼

  9. typedef enum : NSUInteger {

  10. Crash = -10000,

  11. DisConnect,

  12. Unknow,

  13. } YXErrorCode;

  14. @interface YXError : NSObject

    • (NSError *)errorCode:(YXErrorCode)code userInfo:(NSDictionary *)dic;
    • (NSString *)transformCodeToStringInfo:(YXErrorCode)code;
  15. @end

[objc] view plaincopy

<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_5" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. //

  2. // YXError.m

  3. // CustomYXError

  4. //

  5. // Copyright (c) 2014年 Y.X. All rights reserved.

  6. //

  7. import "YXError.h"

  8. static NSDictionary *errorDictionary = nil;

  9. @implementation YXError

    • (void)initialize
  10. {

  11. if (self == [YXError class])

  12. {

  13. errorDictionary = \

  14. @{

  15. /* code : errorWithDomain */

  16. /* ==================================== */

  17. @(Crash) : @"Crash",

  18. @(DisConnect) : @"DisConnect",

  19. @(Unknow) : @"Unknow",

  20. /* ==================================== */

  21. };

  22. }

  23. }

    • (NSError *)errorCode:(YXErrorCode)code userInfo:(NSDictionary *)dic
  24. {

  25. return [NSError errorWithDomain:errorDictionary[@(code)]

  26. code:code

  27. userInfo:dic];

  28. }

    • (NSString *)transformCodeToStringInfo:(YXErrorCode)code
  29. {

  30. return errorDictionary[@(code)];

  31. }

  32. @end

以下是使用的代碼:

[objc] view plaincopy

<embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_6" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_6" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=6&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. import "AppDelegate.h"

  2. import "YXError.h"

  3. @implementation AppDelegate

    • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  4. {

  5. // 定制一個NSError

  6. NSError *error = [YXError errorCode:Crash

  7. userInfo:nil];

  8. NSLog(@"%@", error);

  9. // 翻譯一個NSError(將code值翻譯成字符串)

  10. NSLog(@"%@", [YXError transformCodeToStringInfo:-10000]);

  11. return YES;

  12. }

  13. @end

參考鏈接:https://blog.csdn.net/hdfqq188816190/article/details/52754943

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末摆昧,一起剝皮案震驚了整個濱河市撩满,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绅你,老刑警劉巖伺帘,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異忌锯,居然都是意外死亡伪嫁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門偶垮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來张咳,“玉大人,你說我怎么就攤上這事似舵【祝” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵啄枕,是天一觀的道長。 經常有香客問我族沃,道長频祝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任脆淹,我火速辦了婚禮常空,結果婚禮上,老公的妹妹穿的比我還像新娘盖溺。我一直安慰自己漓糙,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布烘嘱。 她就那樣靜靜地躺著昆禽,像睡著了一般蝗蛙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉鳖,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天捡硅,我揣著相機與錄音,去河邊找鬼盗棵。 笑死壮韭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纹因。 我是一名探鬼主播喷屋,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼橱健,長吁一口氣:“原來是場噩夢啊……” “哼象泵!你這毒婦竟也來了倔约?” 一聲冷哼從身側響起沪羔,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤粉臊,失蹤者是張志新(化名)和其女友劉穎涣觉,沒想到半個月后斯稳,有當地人在樹林里發(fā)現了一具尸體礁击,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡陕截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年驳棱,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片农曲。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡社搅,死狀恐怖,靈堂內的尸體忽然破棺而出乳规,到底是詐尸還是另有隱情形葬,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布暮的,位于F島的核電站笙以,受9級特大地震影響,放射性物質發(fā)生泄漏冻辩。R本人自食惡果不足惜猖腕,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恨闪。 院中可真熱鬧倘感,春花似錦、人聲如沸咙咽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜡豹,卻和暖如春麸粮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背余素。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工豹休, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桨吊。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓威根,卻偏偏與公主長得像,于是被迫代替她去往敵國和親视乐。 傳聞我的和親對象是個殘疾皇子洛搀,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容