View
96
Download
1
Category
Preview:
DESCRIPTION
NSError
Citation preview
iOS Internship 2014NSError+NSExcetion
Максим Забелин
NSError+NSExeption
Ошибки бывают двух видов
Деление на 0, выход за границы массива, ...
NSException
Не удалось загрузить файл, не удалось создать объект, …
NSError
NSError+NSExeptionNSError+NSExeption
NSErrorNSURL *yandex = [NSURL URLWithString:@"http://ya.ru"];NSError *error = nil;NSString *yandexString =
[NSString stringWithContentsOfURL:yandex encoding:NSUTF8StringEncoding error:&error];
NSError всегда передается как указатель на указатель
NSError+NSExeptionNSError+NSExeption
Информация об ошибке- (NSInteger)code; // код ошибки- (NSString *)domain; // домен ошибки (напр., NSCocoaErrorDomain)// могут существовать ошибки с одним кодом, но разными доменами - (NSDictionary *)userInfo; // дополнительная информация
NSError+NSExeptionNSError+NSExeption
userInfo: полезные ключи
● NSLocalizedDescriptionKey
● NSLocalizedFailureReasonErrorKey
● NSLocalizedRecoverySuggestionErrorKey
NSError+NSExeptionNSError+NSExeption
Как использовать такие методы?//...
NSError *error = nil;
NSString *yandexString =
[NSString stringWithContentsOfURL:yandex
encoding:NSUTF8StringEncoding
error:&error];
// сначала проверяем, произошла ли ошибка...
if (error != nil) {
// …, и только после этого обрабатываем ошибку
NSLog(@"Error - %@", error);
}
NSError+NSExeptionNSError+NSExeption
Как самому создать такой метод?- (BOOL)myOwnMethodReturnsError:(NSError *__autoreleasing *)error {
//...if (somethingWrong && error) {
*error = [[NSError alloc] initWithDomain:@"MyErrorDomain" code:666 userInfo:nil];return NO;
}return YES;
}
NSError+NSExeptionNSError+NSExeption
NSExceptionNSArray *array = @[@"one", @"two", @"three"];int index = 100;@try {
NSLog(@"%d item: %@", index, array[index]);}@catch (NSException *exception) {
NSLog(@"Oops... exception occured");NSLog(@"Name - %@", exception.name);NSLog(@"Reason - %@", exception.reason);
}@finally {
// запускается независимо от того, было исключение или нет}
NSError+NSExeptionNSError+NSExeption
Скорее всего, вам это не пригодитсяNSException *myException =[[NSException alloc] initWithName:@"ExceptionName" reason:@"ExceptionReason" userInfo:nil];@throw myException;
//или[NSException raise:@"ExceptionName" format:@"ExceptionReason"];
NSError+NSExeptionNSError+NSExeption
Дополнительные материалыhttp://nshipster.com/nserror/
http://rypress.com/tutorials/objective-c/exceptions.html
Recommended