Objective-C 오류 처리

Objective-C 프로그래밍에서 오류 처리는 다음에서 사용할 수있는 NSError 클래스로 제공됩니다. Foundation framework.

NSError 객체는 오류 코드 또는 오류 문자열 만 사용하여 가능한 것보다 더 풍부하고 확장 가능한 오류 정보를 캡슐화합니다. NSError 객체의 핵심 속성은 오류 도메인 (문자열로 표시), 도메인 별 오류 코드 및 애플리케이션 별 정보를 포함하는 사용자 정보 사전입니다.

NSError

Objective-C 프로그램은 NSError 객체를 사용하여 사용자에게 알려야하는 런타임 오류에 대한 정보를 전달합니다. 대부분의 경우 프로그램은이 오류 정보를 대화 상자 나 시트에 표시합니다. 그러나 정보를 해석하고 사용자에게 오류 복구를 시도하거나 스스로 오류를 수정하도록 요청할 수도 있습니다.

NSError 객체는-

  • Domain − 오류 도메인은 미리 정의 된 NSError 도메인 중 하나이거나 사용자 지정 도메인을 설명하는 임의의 문자열 일 수 있으며 도메인은 nil이 아니어야합니다.

  • Code − 오류에 대한 오류 코드.

  • User Info − 오류에 대한 userInfo 사전 및 userInfo는 nil 일 수 있습니다.

다음 예는 사용자 지정 오류를 만드는 방법을 보여줍니다.

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; 
}

위의 예에서 id가 1이면 이름을 반환하고 그렇지 않으면 사용자 정의 오류 개체를 설정합니다.

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

2013-09-14 18:01:00.809 demo[27632] Name1: Employee Test Name
2013-09-14 18:01:00.809 demo[27632] Error finding Name2: Unable to complete the process