Как кодировать не-C тип данных в Objective-C? - PullRequest
1 голос
/ 23 февраля 2011

Я пытаюсь кодировать тип данных CGPDFPageRef примерно так (Исходный код), но получаю следующую ошибку (сообщение об ошибке консоли):

Исходный код:

//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 не распознается кодировщиком.Итак ... Как я могу кодировать / архивировать / хранить не-объектный тип данных (не C)?Кстати, ЛЮБОЙ способ, который позволил бы мне сохранить CGPDFPageRef на диск, будет достаточным.Спасибо.

Примечание:Apple Docs также заявляет, что структуры данных переменной длины не могут быть закодированы?Я не знаю, может ли это быть проблемой.PDFPages различаются по размеру на диске, поэтому будет ли непрозрачный тип CGPDFPageRef рассматриваться как переменная длина?Я не знаю.Жаль, что это непрозрачно.

1 Ответ

4 голосов
/ 23 февраля 2011

Ваша проблема в том, что CGPDFPageRef является указателем на неполную структуру - компоновщик структуры неизвестен компилятору, поэтому @encode(CGPDFPageRef) создает недопустимую (неполную) кодировку.

Вы должны спроситьбезопасно / целесообразно архивировать непрозрачный тип?Если сам тип не обеспечивает архивирование, то вы не представляете, можно ли его безопасно архивировать.

В этом случае я бы посоветовал вам определить документ, пару номеров страниц и заархивировать их, используя эти данные.при разархивировании для создания CGPDFPageRef.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...