1. 사전 프로젝트 코드 세팅하고 오기
https://growingsaja.tistory.com/869
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. 강제 에러를 발생시키는 예제 - 실행 결과