10 ns error

10
iOS Internship 2014 NSError+NSExcetion Максим Забелин

Upload: noveo

Post on 05-Dec-2014

96 views

Category:

Software


1 download

DESCRIPTION

NSError

TRANSCRIPT

Page 1: 10   ns error

iOS Internship 2014NSError+NSExcetion

Максим Забелин

Page 2: 10   ns error

NSError+NSExeption

Ошибки бывают двух видов

Деление на 0, выход за границы массива, ...

NSException

Не удалось загрузить файл, не удалось создать объект, …

NSError

Page 3: 10   ns error

NSError+NSExeptionNSError+NSExeption

NSErrorNSURL *yandex = [NSURL URLWithString:@"http://ya.ru"];NSError *error = nil;NSString *yandexString =

[NSString stringWithContentsOfURL:yandex encoding:NSUTF8StringEncoding error:&error];

NSError всегда передается как указатель на указатель

Page 4: 10   ns error

NSError+NSExeptionNSError+NSExeption

Информация об ошибке- (NSInteger)code; // код ошибки- (NSString *)domain; // домен ошибки (напр., NSCocoaErrorDomain)// могут существовать ошибки с одним кодом, но разными доменами - (NSDictionary *)userInfo; // дополнительная информация

Page 5: 10   ns error

NSError+NSExeptionNSError+NSExeption

userInfo: полезные ключи

● NSLocalizedDescriptionKey

● NSLocalizedFailureReasonErrorKey

● NSLocalizedRecoverySuggestionErrorKey

Page 6: 10   ns error

NSError+NSExeptionNSError+NSExeption

Как использовать такие методы?//...

NSError *error = nil;

NSString *yandexString =

[NSString stringWithContentsOfURL:yandex

encoding:NSUTF8StringEncoding

error:&error];

// сначала проверяем, произошла ли ошибка...

if (error != nil) {

// …, и только после этого обрабатываем ошибку

NSLog(@"Error - %@", error);

}

Page 7: 10   ns 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;

}

Page 8: 10   ns error

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 {

// запускается независимо от того, было исключение или нет}

Page 9: 10   ns error

NSError+NSExeptionNSError+NSExeption

Скорее всего, вам это не пригодитсяNSException *myException =[[NSException alloc] initWithName:@"ExceptionName" reason:@"ExceptionReason" userInfo:nil];@throw myException;

//или[NSException raise:@"ExceptionName" format:@"ExceptionReason"];

Page 10: 10   ns error

NSError+NSExeptionNSError+NSExeption

Дополнительные материалыhttp://nshipster.com/nserror/

http://rypress.com/tutorials/objective-c/exceptions.html