'프로그래밍에서'에 해당되는 글 1건

  1. 2010.06.21 [펌] 아이폰 프로그래밍에서 객체의 직렬화 방법
아이폰어플개발정보2010. 6. 21. 09:32
[펌] 아이폰 프로그래밍에서 객체의 직렬화 방법
아이폰객체의직렬화방법


아이폰프로그래밍으로객체를저장하거나(파일로혹은DB) 네트워크로보내거나할려면다른플랫폼과마찬가지로직렬화(Serialization) 과정을거쳐야합니다

코코아프레임웍에서는직렬화를위해오브젝트를엔코딩/디코딩해주는편리한클래스를제공하고있는데아이폰에서사용가능한놈은 NSCoder를상속받은 NSKeyedArchiver NSKeyedUnarchiver입니다(아이폰에서 NSArchiver는사용불가니주의)


그럼간단한사용방법을보도록하죠


먼저 NSString 오브젝트를 NSData타입으로직렬화해보도록하겠습니다


엔코딩

NSString *str = @"블라블라블라";

NSData *data = [NSKeyedArchiverarchivedDataWithRootObject:str];



디코딩

NSString *str2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];


이렇게 됩니다. 참간단하죠? 하지만 주의해야할 점이 있습니다. NSKeyedArchiver 인코딩/디코딩 가능한 오브젝트는 반드시 NSCoding프로토콜 불러오고 object내부에   -initWithCoder, -encodeWithCoder 메소드를 구현해줘야합니다. NSCoder 이게 없으면 오브젝트를 어떻게 인코딩/디코딩할지 못알아 먹겠죠..


일단 자주 쓰는 데이터 저장을 위한 대부분의 클래스들은 NSCoding 지원하고 있으니 특별히 손대줄 필요가 없습니다.(NSString , NSDictionary, NSArray... 등등등)



그럼다양한데이터를가진직접만든 Object를가지고해보도록하겠습니다.


UserObject.h


@interface UserObject : NSObject <NSCoding> {   //NSCoding 프로토콜을채용

NSString *str;

int int1;

double double1;

UIImage *img;

}

@property구현



이렇게 NSString 객체,UIImage객체 , 정수형,실수형 데이터를 가진 오브젝트 입니다. 그럼 본격적으로   -initWithCoder, -encodeWithCoder 구현을 해보겠습니다. 메소드의 구현은 NSDictionary등에서 익숙현 키벨류 방식으로 만들어 주면 됩니다.


UserObject.m


//먼저인코딩메소드입니다.

-(void) encodeWithCoder:(NSCoder*) coder{

@"string"];  
[coder encodeDouble:double1 forKey:@"double"]; // object 이외의 실수형이나 정수형 데이터는 각각에 맞는 엔코딩/디코딩 메소드를 가지고 있습니다
encodeInt:int1 forKey:@"int"];
안타깝게 UIImage 클래스 레퍼런스를 확인하면 NSCoding 지원하지 않습니다. 그렇기 때문에 이와같이 하면 에러가 납니다. 그렇게 때문에 UIImagePNGRepresentation메소드를 이용해서 UIImage 이미지를 NSData타입으로 바꾼다음에 집어넣으면 됩니다.
[coder encodeObject:UIImagePNGRepresentation(img) forKey:@"img"];

}


//그다음디코딩메소드입니다. 짝을맞춰줍시다.


-(id) initWithCoder:(NSCoder *)decoder{

if(self = [superinit]{

self.str = [decoder decodeObjectForKey:@"string"];

self.double1 = [decoder decodeDoubletForKey:@"double"];

self.int1 = [decoder decodeIntForKey:@"int1"];

self.img = [UIImageimageWithData:[decoder decodeObjectForKey:@"img"]];

}

;

}

이런식으로아무리복잡한데이터형태의오브젝트라도엔코딩/디코딩메소드만구현해주면쉽게직렬화가됩니다. 이상입니다~

http://cafe.naver.com/mcbugi/17649



출처 : http://blog.naver.com/PostView.nhn?blogId=seogi1004&logNo=110087700353
Posted by 오늘마감

댓글을 달아 주세요