В программировании Objective C обработка ошибок обеспечивается классом NSError, доступным в платформе Основы.
Объект NSError инкапсулирует более обширную и расширяемую информацию об ошибках, чем это возможно, используя только код ошибки или строку ошибки. Основными атрибутами объекта NSError являются домен ошибок (представленный строкой), код ошибки, специфичный для домена, и словарь информации о пользователе, содержащий информацию, специфичную для приложения.
NSError
Программы Objective-C используют объекты NSError для передачи информации об ошибках во время выполнения, о которых необходимо информировать пользователей. В большинстве случаев программа отображает эту информацию об ошибке в диалоговом окне или на листе. Но он также может интерпретировать информацию и попросить пользователя попытаться исправить ошибку или попытаться исправить ошибку самостоятельно.
NSError Object состоит из —
-
Домен — домен ошибки может быть одним из предопределенных доменов NSError или произвольной строкой, описывающей пользовательский домен, и домен не должен быть равен нулю.
-
Код — код ошибки для ошибки.
-
Информация о пользователе — словарь userInfo для ошибки и userInfo может быть ноль.
Домен — домен ошибки может быть одним из предопределенных доменов 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];
Вот полный код вышеприведенного примера ошибки, переданного как ссылка на указатель:
#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 @""; } } @end int main() { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 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); } [pool drain]; return 0; }
В приведенном выше примере мы возвращаем имя, если идентификатор равен 1, в противном случае мы устанавливаем пользовательский объект ошибки.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —