Objective-C错误处理 – Objective-C开发教程

上一章Objective-C开发教程请查看:Objective-C日志处理?
在Objective-C编程中,错误处理在Foundation框架中提供了NSError类。
与仅使用错误代码或错误字符串相比,NSError对象封装了更丰富、更可扩展的错误信息。NSError对象的核心属性是一个错误域(由字符串表示)、一个特定于域的错误代码和一个包含应用程序特定信息的用户信息字典。
NSErrorObjective-C程序使用NSError对象来传递有关运行时错误的信息,用户需要知道这些信息。在大多数情况下,程序会在对话框或工作表中显示此错误信息。但是它也可以解释信息,或者要求用户尝试从错误中恢复,或者尝试自己纠正错误
NSError对象由以下部分组成

  • 域——错误域可以是预定义的NSError域之一,也可以是描述自定义域的任意字符串,域不能为空。
  • 代码——错误的错误代码。
  • 用户信息——错误的userInfo字典,userInfo可能为空。
下面的示例演示如何创建自定义错误:
NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain"; NSString *desc = NSLocalizedString(@"Unable to complete the process", @""); NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc }; NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];

【Objective-C错误处理 – Objective-C开发教程】下面是作为指针引用传递的上述错误示例的完整代码:
#import < Foundation/Foundation.h>@interface SampleClass:NSObject -(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr; @end@implementation SampleClass-(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr { if(id == 1) { return @"Employee Test Name"; } else { NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain"; NSString *desc =@"Unable to complete the process"; NSDictionary *userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:desc, @"NSLocalizedDescriptionKey",NULL]; *errorPtr = [NSError errorWithDomain:domain code:-101 userInfo:userInfo]; return @""; } }@endint main() { SampleClass *sampleClass = [[SampleClass alloc]init]; NSError *error = nil; NSString *name1 = [sampleClass getEmployeeNameForID:1 withError:& error]; if(error) { NSLog(@"Error finding Name1: %@",error); } else { NSLog(@"Name1: %@",name1); }error = nil; NSString *name2 = [sampleClass getEmployeeNameForID:2 withError:& error]; if(error) { NSLog(@"Error finding Name2: %@",error); } else { NSLog(@"Name2: %@",name2); }return 0; }

    推荐阅读