定制NSError

定制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者之间建立联系的做法还是很有意思的):

时间: 2024-11-01 12:39:56

定制NSError的相关文章

android webview定制contextmenu

问题描述 android webview定制contextmenu 10C 如何实现图种的webview的上下文菜单.需求是获取选中的内容,进行操作. 解决方案 http://www.2cto.com/kf/201310/248762.html 解决方案二: android的ContextMenuAndroid ContextMenuandroid ContextMenu 解决方案三: webview里的问题是可以实现你说的功能,不需要单独设置. 解决方案四: 你把属性设置对就不会错了 解决方案

视频出炉:4月15日《阿里云RDS MySQL分支深度定制实战分享》

活动视频 <阿里云RDS MySQL分支深度定制实战分享> PDF地址:https://oss.aliyuncs.com/yqfiles/a5344b5961b367786a95620c636c4640.pdf 分享简介:阿里云RDS MySQL经过多年的积累,不断的进行性能优化,并定制了适合不同行业需求的功能,同时也向官方和社区贡献力量.本次主题主要介绍RDS MySQL分支的深度定制,包括功能扩展.资源管控.性能优化.数据安全.行业解决方案等. 分享者:赵建伟,现任阿里云数据库内核资深研发

定制UITabBar显示样式

定制UITabBar显示样式   思路是这样子的: 1. 初始化UITabBarController,并装载进来几个其他的ViewController 2. 获取每个控制器的UITabBarItem 3. 单独配置每个ViewController对应的UITabBarItem(其中,文字可以设置偏移量) 就这么简单哦!       问:如何设置UITabBarController高亮选中的颜色值呢?   问:[UITabBar appearance]能干什么? 他是进行UITabBarContr

随着HTML5的普及,定制化的移动CRM应用时代即将到来

 近年来,移动CRM应用异常火爆,大多为原生APP形式,且大部分产品不支持定制.对于很多用户来讲,已经不再满足于只是有一个移动端CRM了,更希望用上根据自身业务流程定制的移动CRM.     在移动端,用原生APP进行这样的纯个性化定制的成本是很高的.但使用HTML5就变得很容易了,HTML5的特点是跨平台.跨设备一次开发,多处使用,用户无需下载,瞬间打开,用户无需升级,永远最新,无需经过应用商店发布.     当然,HTML5也有它的局限性,比如,使用CSS样式或者CSS动画的用户体验无法与原

dijit样式定制之TextBox(一)

参考资料:http://dojotoolkit.org/reference-guide/1.9/dijit/themes.html http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html http://www.lesscss.net/article/home.html 这系列博客主要因为工作中经常需要更改dijit样式,每次都需要看dijit的DOM结构来更改,好多次都是改了一个class样

ABC定制视图导航控制器

ABCustomUINavigationController  ABC定制视图导航控制器   Subclass of UINavigationController for overwriting push and pop methods to create new transitions effects. Currently it has been implemented two transition animations:继承至 UINavigationController (UI导航控制器)

代码-Android 如何定制OTA升级时优化应用界面

问题描述 Android 如何定制OTA升级时优化应用界面 请教一下相应代码在哪? ![ 解决方案 给你推荐个人 中国AOSP开源大神 马丁龙猪

定制并发类(六)自定义在计划的线程池内运行的任务

声明:本文是< Java 7 Concurrency Cookbook>的第七章, 作者: Javier Fernández González 译者:郑玉婷 自定义在计划的线程池内运行的任务 计划的线程池是 Executor 框架的基本线程池的扩展,允许你定制一个计划来执行一段时间后需要被执行的任务. 它通过 ScheduledThreadPoolExecutor 类来实现,并允许运行以下这两种任务: Delayed 任务:这种任务在一段时间后仅执行一次. Periodic 任务:这种任务在延

windows ce-vs2005定制内核遇到的问题

问题描述 vs2005定制内核遇到的问题 请教各位了, 我用vs2005定制内核时出现以下错误,是怎么回事: 用vs2005建立Platform Builder for CE 6.0工程时,提示The global default build tree (WINCEROOT) has not been set, or is invalid. Make sure that the WINCEROOT is set correctly before creating an OS design. To