定制NSError
效果:
系统的NSError是可以自己定制的,以下提供代码来实现并表示如何使用:
YXError.h 与 YXError.m
//
// YXError.h
// CustomYXError
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import <Foundation/Foundation.h>
// 自行添加错误码
typedef enum : NSUInteger {
Crash = -10000,
DisConnect,
Unknow,
} YXErrorCode;
@interface YXError : NSObject
+ (NSError *)errorCode:(YXErrorCode)code userInfo:(NSDictionary *)dic;
+ (NSString *)transformCodeToStringInfo:(YXErrorCode)code;
@end
//
// YXError.m
// CustomYXError
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import "YXError.h"
static NSDictionary *errorDictionary = nil;
@implementation YXError
+ (void)initialize
{
if (self == [YXError class])
{
errorDictionary = \
@{
/* code : errorWithDomain */
/* ==================================== */
@(Crash) : @"Crash",
@(DisConnect) : @"DisConnect",
@(Unknow) : @"Unknow",
/* ==================================== */
};
}
}
+ (NSError *)errorCode:(YXErrorCode)code userInfo:(NSDictionary *)dic
{
return [NSError errorWithDomain:errorDictionary[@(code)]
code:code
userInfo:dic];
}
+ (NSString *)transformCodeToStringInfo:(YXErrorCode)code
{
return errorDictionary[@(code)];
}
@end
以下是使用的代码:
//
// AppDelegate.m
// NSError
//
// Copyright (c) 2014年 YouXianMing. All rights reserved.
//
#import "AppDelegate.h"
#import "YXError.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 定制一个NSError
NSError *error = [YXError errorCode:Crash
userInfo:nil];
NSLog(@"%@", error);
// 翻译一个NSError(将code值翻译成字符串)
NSLog(@"%@", [YXError transformCodeToStringInfo:-10000]);
return YES;
}
@end
以下是自行添加错误代码的地方:
以下是设计的细节(其中,将字典,枚举值,字符串3者之间建立联系的做法还是很有意思的):