2011-08-31 3 views
0

I 하나 개 이상의 경로에서 포인트를 정의하는 2 차원 배열을 가지고시오/아이폰 2D 어레이 직렬화

패스 # 1 = (1,1) (3,3) (6,6)를

경로 # 다음은이 = (5,3) (15,5) (16,46)

내 코드

NSArray path1 = make array of CGPoints 
NSArray path2 = make array of CGPoints 

NSMutableArray paths = [[NSMutableArray alloc] init]; 
[paths addObject:path1]; 
[paths addObject:path2]; 

질문입니다 : 어떻게이 개체를 역 직렬화/직렬화합니까?

답변

0

배열의 모든 객체가 대부분의 기본 클래스에서 수행하는 NSCoding 프로토콜을 구현하는 한 NSKeyedArchiver을 사용하여 전체 배열 구조를 직렬화 할 수 있어야합니다.

보관이/파일에서 /에 직접 아카이브 해제, 그것은 이런 식으로 뭔가 보일 것입니다 경우 당신은 그냥 원시 데이터를 원하는 경우

NSString *filename = @"[filename]"; 
[NSKeyedArchiver archiveRootObject:paths toFile:filename]; 
paths = [NSKeyedUnarchiver unarchiveObjectWithFile:filename]; 

는, 어쩌면 NSUserDefaults에 밀어하거나 네트워크를 통해 전송을, 그것은해야 이처럼 보일 :

NSData *binaryData = [NSKeyedArchiver archivedDataWithRootObject:paths]; 
paths = [NSKeyedUnarchiver unarchiveObjectWithData:binaryData]; 

당신이 그 배열에서 사용자 정의 클래스가있는 경우, 당신은 지루하지만, 어려운 일이 아니다있는 NSCoder을 직접 구현해야 할 수도 있습니다.

또한 가변 배열 및 사전에주의해야 할 수 있습니다. 나는 변경 될 수있는 객체가 보관 될 때 변경되지 않는 객체에 대해 기억하고있는 것처럼 보이기 때문에 객체를 추가하기 전에 확인하고 싶을 수도 있습니다.

추가 읽기 :

NSCoder Class Reference

Archives and Serializations Programming Guide