어흥

[Objective - C] 아카이빙 본문

iOS

[Objective - C] 아카이빙

라이언납시오 2020. 10. 16. 14:29
728x90
반응형

1. 기능

- 객체를 저장/복원한다

- 인코딩과 디코딩을 통해 객체의 정보를 파일에 저장하고 읽어온다

- 저장된 파일을 읽어올때에는 인코딩문제로 인해 제대로 못 읽어오는것 같다(앱을 통해 파일을 여는 경우) -> 설정문제인것 같은데...

//Rectangle.h
#import <Foundation/Foundation.h>

@interface Rectangle : NSObject <NSCoding>		//NSCoding 프로토콜 채택
@property int width,height;

@end


//Rectangle.m
#import "Rectangle.h"

@implementation Rectangle
//Decoder로 파일로부터 불러온 객체에서 가로와 세로 값 저장
-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if(self) {
        //초기화
        _height = [aDecoder decodeIntForKey:@"HEIGHT"];
        _width = [aDecoder decodeIntForKey:@"WIDTH"];
    }
    return self;
}

//Encode로 파일에 Map형태로 Key와 Value 저장
-(void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeInt:_width forKey:@"WIDTH"];
    [coder encodeInt:_height forKey:@"HEIGHT"];
}

//객체에 대한 설명
-(NSString *)description {
    return [NSString stringWithFormat:@"사각형 - 가로,세로 (%d,%d)",_width,_height];
}

@end


//Main.m
#import <Foundation/Foundation.h>
#import "Rectangle.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
    	//직사각형 객체 obj 생성
        Rectangle *obj = [[Rectangle alloc] init];
        obj.height = 20;
        obj.width = 10;
        NSLog(@"Obj1 : %@",obj);		//description 함수를 바탕으로 출력
        
        //경로 저장
        NSString *filePath = @"/Users/dream/Desktop/objective-c/Archiver/TestArchive";
        
        //객체를 파일로 저장
        BOOL ret = [NSKeyedArchiver archiveRootObject:obj toFile:filePath];
        NSLog(@"Ret : %d", ret);
    
    	//파일로부터 읽어온 데이터들을 객체에 저장
        Rectangle *obj2 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        NSLog(@"Obj2 : %@",obj2);
    }
    return 0;
}
728x90
반응형

'iOS' 카테고리의 다른 글

[Objective - C] 프로젝트 기본 설정  (0) 2020.10.20
[Objective - C] 기본 예제(종합)  (0) 2020.10.19
[Objective-c] Collection  (0) 2020.10.16
[Objective-C] 문자열, 파일, 프로토콜  (2) 2020.10.15
[Objective-C] 기본 내용 2  (0) 2020.10.14
Comments