• [Objective-C语言教程]错误处理(22)


    在Objective-C编程中,错误处理由Foundation框架中提供的NSError类提供处理。

    与仅使用错误代码或错误字符串相比,NSError对象封装了更丰富且更具可扩展性的错误信息。 NSError对象的核心属性是错误域(由字符串表示),特定于域的错误代码和包含应用程序特定信息的用户信息字典。

    NSError

    Objective-C程序使用NSError对象来传达有关用户需要了解的运行时错误的信息。 在大多数情况下,程序会在对话框或工作表中显示此错误信息。 但它也可能会解释信息并要求用户尝试从错误中恢复或尝试自行更正错误

    NSError对象包括 -

    • - 错误域可以是预定义的NSError域之一,也可以是描述自定义域和域的任意字符串,不能为nil
    • 代码 - 错误的错误代码。
    • 用户信息 - 错误和userInfo的字典可能为nil

    以下示例代码显示如何创建自定义错误 -

    1 NSString *domain = @"com.yiibai.MyApplication.ErrorDomain";
    2 NSString *desc = NSLocalizedString(@"Unable to complete the process", @"");
    3 NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };
    4 NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];

    以下是作为对指针的引用传递的上述错误示例的完整代码 -

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface SampleClass:NSObject
     4 -(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr;
     5 @end
     6 
     7 @implementation SampleClass
     8 
     9 -(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr {
    10    if(id == 1) {
    11       return @"Employee Test Name";
    12    } else {
    13       NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain";
    14       NSString *desc =@"Unable to complete the process";
    15       NSDictionary *userInfo = [[NSDictionary alloc] 
    16       initWithObjectsAndKeys:desc,
    17       @"NSLocalizedDescriptionKey",NULL];  
    18       *errorPtr = [NSError errorWithDomain:domain code:-101 
    19       userInfo:userInfo];
    20       return @"";
    21    }
    22 }
    23 
    24 @end
    25 
    26 int main() {
    27    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    28    SampleClass *sampleClass = [[SampleClass alloc]init];
    29    NSError *error = nil;
    30    NSString *name1 = [sampleClass getEmployeeNameForID:1 withError:&error];
    31 
    32    if(error) {
    33       NSLog(@"Error finding Name1: %@",error);
    34    } else {
    35       NSLog(@"Name1: %@",name1);
    36    }
    37 
    38    error = nil;
    39    NSString *name2 = [sampleClass getEmployeeNameForID:2 withError:&error];
    40 
    41    if(error) {
    42       NSLog(@"Error finding Name2: %@",error);
    43    } else {
    44       NSLog(@"Name2: %@",name2);
    45    }
    46 
    47    [pool drain];
    48    return 0; 
    49 }

    在上面的例子中,如果id1,则返回一个名称,否则设置用户定义的错误对象。

    编译并执行上述代码时,会产生以下结果 -

    1 2018-11-15 13:53:52.027 main[136833] Name1: Employee Test Name
    2 2018-11-15 13:53:52.029 main[136833] Error finding Name2: Unable to complete the process
  • 相关阅读:
    使用jQuery对象:DOM属性、CSS、尺寸、遍历、DOM操作、事件、特效
    jQuery常见代码,注意事项
    使用jQuery函数:选择器 工具类 Ajax
    jQuery的两把利器:jQuery的核心函数 jQuery的核心对象 补充:伪数组
    初识jQuery:jQuery是什么,为什么要用它? 2种js库库文件 2种引用JS库的方式 使用jQuery jQuery内部简略结构
    H5 Web Workers:什么是 Web Worker? 使用 图解 Web Workers和DOM
    线程机制与事件机制:进程与线程 浏览器内核 定时器引发的思考 JS是单线程执行的 浏览器的事件循环(轮询)模型
    对象创建模式 继承模式 补充(new一个对象的背后做了些什么?)
    【React+antd】做一个自定义列的组件
    当你要给页面插入背景音乐
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571634.html
Copyright © 2020-2023  润新知