1. 사전 프로젝트 코드 세팅하고 오기

 

https://growingsaja.tistory.com/869

 

[Objective-C] 프로젝트 기본 세팅 소스코드 예시

1. AppDelegate 수정 with 설명 // vim AppDelegate.h #import // MARK: - [클래스 설명] /* // ----------------------------------------- 1. 애플리케이션 딜리게이트 (선언부) 2. 전역변수 , 메소드 , 인스턴스변수 (클래스 생

growingsaja.tistory.com

 

 

 

 

 

2. string to json 에러를 발생시키는 예제 - ViewController.m 소스 코드 수정

 

string to json이 실패하지만 catch로 잡는거 확인을 위해 코드 작성

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. try catch finally : 프로그램 구문에서 에러가 발생할 문법에 예외 처리를 실시합니다
    2. catch : exception 을 사용해 에러가 발생한 이유를 확인할 수 있습니다
    3. finally : try catch 구문 이후 무조건 수행되는 단계입니다
    */
    
    
    // [초기 변수 선언 실시]
    NSString *strData = @"hello 투케이";
    
    
    // [try catch finally 구문 선언 실시]
    @try {
        NSLog(@"[try [구문 시작]]");
        
        // [에러를 발생 시키키 위한 string to json 데이터 형 변환 수행]
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:strData options:NSJSONWritingPrettyPrinted error:nil];
        
    } @catch (NSException *exception) {
        NSLog(@"[catch [name] :: %s]", exception.name.description.UTF8String);
        NSLog(@"[catch [reason] :: %s]", exception.reason.description.UTF8String);
        
        // 에러 발생 시 catch 문자열 삽입
        strData = @"catch!";
    } @finally {
        // 최종 결과 출력 수행 실시
        NSLog(@"[finally [결과] :: %s]", strData.UTF8String);
    }
}

// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

3. string to json 에러를 발생시키는 예제 - 실행 결과

 

 

 

 

 

 

 

 

 

 

 

4. 강제 에러를 발생시키는 예제 - ViewController.m 소스 코드 수정

 

// vim ViewController.m

// ViewController.h 파일을 import하여 해당 클래스의 정의를 가져옵니다.
#import "ViewController.h"

// MARK: - [헤더 [선언부] 호출]
@interface ViewController ()
@end
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
// 메서드를 구현합니다. 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출되는 메서드입니다.
- (void)viewDidLoad {
    // 부모 클래스인 UIViewController의 viewDidLoad 메서드를 호출합니다.
    [super viewDidLoad];
    NSLog(@"[ViewController >> viewDidLoad() :: 뷰 로드 실시]");
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"[ViewController >> viewWillAppear() :: 뷰 로드 완료]");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"[ViewController >> viewDidAppear() :: 뷰 화면 표시]");
    
    // [테스트 메인 함수 호출]
    [self testMain];
}


// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"[ViewController >> viewWillDisappear() :: 뷰 정지 상태]");
}


// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"[ViewController >> viewDidDisappear() :: 뷰 종료 상태]");
}


// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");

    /*
    // MARK: [요약 설명]
    1. try catch finally : 프로그램 구문에서 에러가 발생할 문법에 예외 처리를 실시합니다
    2. catch : exception 을 사용해 에러가 발생한 이유를 확인할 수 있습니다
    3. finally : try catch 구문 이후 무조건 수행되는 단계입니다
    */
    
    
    // [초기 변수 선언 실시]
    NSString *strData = @"hello 투케이";
    
    
    // [try catch finally 구문 선언 실시]
    @try {
        NSLog(@"[try [구문 시작]]");
        
        // [강제 에러 발생 리턴]
        @throw (
                [NSException
                 exceptionWithName:@"TwokException"
                 reason:@"test exception"
                 userInfo:nil]
                );
        //
        
    } @catch (NSException *exception) {
        NSLog(@"[catch [name] :: %s]", exception.name.description.UTF8String);
        NSLog(@"[catch [reason] :: %s]", exception.reason.description.UTF8String);
        
        // 에러 발생 시 catch 문자열 삽입
        strData = @"catch!";
    } @finally {
        // 최종 결과 출력 수행 실시
        NSLog(@"[finally [결과] :: %s]", strData.UTF8String);
    }
}

// -----------------------------------------
@end
// -----------------------------------------

 

 

 

 

 

5. 강제 에러를 발생시키는 예제 - 실행 결과

 

 

 

 

+ Recent posts