gpt4 book ai didi

objective-c - 如何在 Objective-c 中编码非 C 数据类型?

转载 作者:行者123 更新时间:2023-12-03 16:55:41 25 4
gpt4 key购买 nike

我正在尝试像这样对数据类型 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 不透明类型是否会被视为可变长度?我不知道。可惜它不透明。

最佳答案

您的问题是 CGPDFPageRef 是指向不完整结构的指针 - 编译器不知道该结构的布局,因此 @encode(CGPDFPageRef) 会产生无效的 (不完整)编码。

您必须问归档不透明类型是否安全/有意义?如果类型本身不提供存档,那么您不知道是否可以安全地存档它。

在这种情况下,我建议您确定文档、页码对并将其存档,使用解档时的数据创建 CGPDFPageRef

关于objective-c - 如何在 Objective-c 中编码非 C 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5086720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com