2011-02-23 2 views
1

내가 데이터 유형과 같이 CGPDFPageRef (소스 코드)를 인코딩하기 위해 노력하고 있지만, 다음과 같은 오류를 얻고있다 (콘솔 오류 메시지) :Objective-c에서 non-C 데이터 형식을 인코딩하는 방법은 무엇입니까?

소스 코드 :

//Get a CGPDFPageRef to page 20 of the current PDF document ref 
CGPDFPageRef pageRef = CGPDFDocumentGetPage(myDocumentRef, 20); 

//Set up the paths for writing 
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"thisPage.wrapit"]; 

//Encode the CGPDFPageRef to the path 
NSValue *pageRefObj = [NSValue value:&pageRef withObjCType:@encode(CGPDFPageRef)]; 
[NSKeyedArchiver archiveRootObject:pageRefObj toFile:path]; 

콘솔 오류 메시지 :

-[NSKeyedArchiver encodeValueOfObjCType:at:]: unknown type encoding ('^')' 

내 이론 :
CGPDFPageRef 형식이 인코더에서 인식되지 않기 때문에 오류라고 생각합니다. 그럼 ... 어떻게하면 개체가 아닌 데이터 형식 (non-C)을 인코딩/보관/저장할 수 있습니까? 그런데 ANY 디스크에 CGPDFPageRef를 저장할 수있는 방법이면 충분합니다. 고맙습니다.

사이드 노트 :
Apple 문서에는 가변 길이 데이터 구조를 인코딩 할 수 없다고 명시되어 있습니까? 이것이 문제가 될지 모르겠습니다. PDFPages는 디스크의 크기가 다양하기 때문에 CGPDFPageRef 불투명 유형이 가변 길이로 간주됩니까? 나는 몰라. 너무 불투명합니다.

+0

NSData의 dataWithBytes : 메소드가 도움이 될까요? 댓글 달기 주신 덕분에 @Darren –

+0

당신은 정교 할 수 있습니까? 어떻게하면 CGPDFPageRef를 바이트 형태로 만들 수 있습니까? – m0rtimer

+0

@darren 나는 놀아서 CGPDFPageRef의 바이트를 얻을 수 있었다. 하지만 데이터 바이트를 다시 CGPDFPageRef로 변환하려고 할 때 막혔습니다! 어떤 아이디어? 덕분에 – m0rtimer

답변

4

문제는 CGPDFPageRef이 불완전한 구조체에 대한 포인터입니다. 구조체의 레이아웃을 컴파일러에서 알 수 없으므로 이 잘못된 (불완전한) 인코딩을 생성합니다.

불투명 한 형식을 보관하는 것이 안전할까요/의미있는 것인지 묻는 것이 좋습니다. 유형 자체가 보관 기능을 제공하지 않는다면 안전하게 보관할 수 있는지 전혀 알 수 없습니다.

이 경우 문서, 페이지 번호 쌍을 결정하고 그 데이터를 사용하여 아카이브 해제시 데이터를 사용하여 CGPDFPageRef을 생성하는 것이 좋습니다.

+0

. 네가 옳아. 대신, 나는 pdf 그림 변환에서 jpeg를 얻고 대신 그 파일을 보관하는 것에 의지했습니다. 건배 – m0rtimer

관련 문제