您的位置:首页 > 移动开发 > Objective-C

Objective-C错误处理

2016-03-19 18:54 477 查看

Objective-C错误处理

OC里面的错误Error指的是所有的错误。而错误也可以划分为两种:程序代码本身的逻辑错误,和由于外部条件引起的执行错误。

程序本身的错误 通常不会让用户知道,对这些错误的处理是为了保证程序的正常运行,这些错误也可以说是程序员犯的错误,比如数组越界访问等等。

运行时由于外部条件引起的错误,通常是不可控制的,比如网络断开,下载数据失败等。通常需要把错误的消息呈现给用户。

JAVA所有的错误都用Exception来处理,但是对于OC却不一样:NSError通常就是用来处理运行时的错误。而NSException就是专门用来处理程序员的错误。

- NSError

1. 错误的提醒

在Cocoa 和Cocoa Touch的类中都有很多有关错误提醒的方法,一旦错误发生,会抛出错误对象,以供其他方法来处理这个错误。很多协议都定义了异常处理方法,参数就是NSError对象。NSError对象封装了错误码、错误域以及错误描述。Cocoa和Cocoa Touch把很多错误划分成不同的错误域(Error Domain)。

2. 有些方法返回错误对象的指针

在Cocoa 和Cocoa Touch的类中,有些方法不是直接抛出错误,而是把错误对象赋给指定的指针。比如:NSData类的方法

writeToURL:options:error:。
NSError *anyError;
BOOL success = [receivedData writeToURL:someLocalFileURL options:0 error:&anyError];
if (!success) {
NSLog(@"Write failed with error: %@", anyError);
// present error to user
}


当发生错误的时候,会把错误的引用赋给anyError,并且返回一个布尔值。在使用的时候,要判断是否成功(没有发生错误),应该通过判断返回值,而不是去判断指针是否已经指向了错误。

当然,有时候对错误对象并不关心,只关心是否成功,那么可以用NULL作为error的参数。

3. 对可处理的错误进行处理和呈现

新建错误类

首先要新建一个错误域,错误域的组成通常应该这样:

com.companyName.appOrFrameworkName.ErrorDomain


要为这个域里面的每个错误选一个唯一的错误码,加上描述(这会存储在用户字典中):

NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain";
NSString *desc = NSLocalizedString(@"Unable to…", @"");
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };
NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];


- 异常处理NSException

和Java一样的,try-catch:

@try{

}
@catch(NSException *exception){

}
@finally{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: