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

 

https://growingsaja.tistory.com/869

 

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

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

growingsaja.tistory.com

 

 

 

 

 

2. dictionary 데이터 간단히 출력해보는 실습 소스코드

 

// 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() :: 뷰 종료 상태]");
}

- (void)testMain {
    NSLog(@"[ViewController >> testMain() :: 테스트 메소드 수행]");
    
    /*
    // ------------------------------------
    [요약 설명]
    // ------------------------------------
    1. 딕셔너리는 key , value 값을 가지는 객체입니다 (자바에서 hashmap 개념)
    // ------------------------------------
    */
    
    
    // [초기 변수 선언 실시]
    NSDictionary *dic = @{@"key_1" : @"value_1", @"key_2" : @"value_2"};
    
    
    // [저장된 개수 출력]
    NSInteger count = [dic count];
    
    
    // [전체 로그 출력 실시]
    NSLog(@"count :: %li", count);
    NSLog(@"dicData :: %s", dic.description.UTF8String);
    
    
    // [key 리스트 출력 실시]
    NSArray *keyList = [dic allKeys];
    
    NSLog(@"key :: %s", keyList.description.UTF8String);
    
    // [value 리스트 출력 실시]
    NSArray *valueList = [dic allValues];
    
    NSLog(@"value :: %s", valueList.description.UTF8String);
    
    
    // [개별 특정 key 값 데이터 출력 실시]
    NSString *key_1 = dic[@"key_1"];
    NSLog(@"key_1 :: %s", key_1.description.UTF8String);
    
}



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

 

 

 

 

 

3. dictionary 데이터 간단히 출력해보는 실습 결과 예시

 

 

 

 

 

 

4. json, dictionary 변환 및 data type 감지해 type에 따라 다른 처리 수행 예시 - 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() :: 테스트 메소드 수행]");
    
    // [초기 인풋 배열, 딕셔너리 데이터 선언 실시]
    NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
    [mutableArray addObject:@"하나"];
    [mutableArray addObject:@"둘"];

    NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
    [mutableDic setObject:@"투케이" forKey:@"name"];
    [mutableDic setObject:@29 forKey:@"age"];

    
    // [json 생성 딕셔너리 선언 실시]
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    [dic setObject:@"value_1" forKey:@"key_1"];
    [dic setObject:@10 forKey:@"key_2"];
    [dic setObject:@true forKey:@"key_3"];
    [dic setObject:mutableArray forKey:@"key_4"];
    [dic setObject:mutableDic forKey:@"key_5"];
    
    
    
    // [json 형식 문자열을 저장할 변수 선언 실시]
    NSString *jsonData = @"";

    
    
    // [try catch finally 구문 선언 실시]
    @try {
        NSLog(@"[dic to json [구문 시작]] \n");
        
        // [딕셔너리 >> json 데이터 포맷 수행 실시]
        NSData *dicData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
        jsonData = [[NSString alloc] initWithData:dicData encoding:NSUTF8StringEncoding];
        NSLog(@"[dic to json [데이터 포맷] : %s]", jsonData.description.UTF8String);
        NSLog(@"[json to dic [구문 시작]]");
        
        // [json >> 딕셔너리 데이터 포맷 수행 실시]
        NSData *parseData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];
        NSJSONReadingOptions readingOptions = NSJSONReadingMutableContainers; // 옵션 변경
        NSMutableDictionary *parseDic = [NSJSONSerialization JSONObjectWithData:parseData options:readingOptions error:nil];
        
        
        // [for 문을 수행해서 json >> 딕셔너리로 변환한 데이터 출력 실시]
        for (NSString *keyData in parseDic.allKeys){
            
            // [value 데이터 확인 실시]
            NSObject *obj = [parseDic objectForKey:keyData];
            
            
            // [value 데이터 타입 확인 실시]
            NSString *checkType = [NSString stringWithFormat:@"%@" , [obj class]];
            checkType = checkType.lowercaseString; // 소문자 변환
            
            
            // [타입 별 value 데이터 출력 실시]
            int plusJson = 0; // 배열, 딕셔너리 데이터 세부 json 재포맷 여부
            if ([checkType rangeOfString:@"array"].location == NSNotFound){
                // MARK: [일반 형식인 경우]
                if ([checkType rangeOfString:@"dictionary"].location == NSNotFound){
                    // [데이터 삽입]
                    plusJson = 0;
                }
                // MARK: [딕셔너리 형식인 경우]
                else {
                    // [데이터 삽입]
                    plusJson = 1;
                }
            }
            // MARK: [배열 형식인 경우]
            else {
                // [데이터 삽입]
                plusJson = 2;
            }
            
            
            // [세부 json 형식 포맷 여부 확인]
            if (plusJson == 1){ // 딕셔너리 세부 json 포맷
                NSMutableDictionary *copyDic = [NSMutableDictionary dictionaryWithDictionary:(NSDictionary *)obj];
                NSData *copyDicData = [NSJSONSerialization dataWithJSONObject:copyDic options:NSJSONWritingPrettyPrinted error:nil];
                NSString *copyDicJson = [[NSString alloc] initWithData:copyDicData encoding:NSUTF8StringEncoding];
                NSLog(@"[dic for [key] :: %s]", keyData.description.UTF8String);
                NSLog(@"[dic for [value] [type] :: %s]", checkType.description.UTF8String);
                NSLog(@"[dic for [value] [data] :: %s]", copyDicJson.description.UTF8String);
            }
            else if (plusJson == 2){ // 배열 세부 json 포맷
                NSMutableArray *copyArray = [NSMutableArray arrayWithObject:obj];
                NSData *copyArrayData = [NSJSONSerialization dataWithJSONObject:copyArray options:NSJSONWritingPrettyPrinted error:nil];
                NSString *copyArrayJson = [[NSString alloc] initWithData:copyArrayData encoding:NSUTF8StringEncoding];
                NSLog(@"[dic for [key] :: %s]", keyData.description.UTF8String);
                NSLog(@"[dic for [value] [type] :: %s]", checkType.description.UTF8String);
                NSLog(@"[dic for [value] [data] :: %s]", copyArrayJson.description.UTF8String);
            }
            else { // 일반 출력
                NSString *valueData = [NSString stringWithFormat:@"%@" , parseDic[keyData]];
                NSLog(@"[dic for [key] :: %s] \n", keyData.description.UTF8String);
                NSLog(@"[dic for [value] [type] :: %s]", checkType.description.UTF8String);
                NSLog(@"[dic for [value] [data] :: %s]", valueData.description.UTF8String);
            }
        }
        
    } @catch (NSException *exception) {
        NSLog(@"[catch [name] :: %s]", exception.name.description.UTF8String);
        NSLog(@"[catch [reason] :: %s]", exception.reason.description.UTF8String);
    }
}

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

 

 

 

 

 

5. json, dictionary 변환 및 data type 감지해 type에 따라 다른 처리 수행 예시 - 결과 예시

 

 

 

 

 

+ Recent posts