어흥
[Objective - C] 아카이빙 본문
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