首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅对于某些页面,在CGContextDrawPDFPage之后释放上下文时出现异常

仅对于某些页面,在CGContextDrawPDFPage之后释放上下文时出现异常
EN

Stack Overflow用户
提问于 2011-11-22 02:13:32
回答 2查看 1.7K关注 0票数 5

我继承了一些iOS代码,它可以打开源文件并创建一个CGContextRef,我们可以从源文件中将一个页面绘制到这个the。问题是某些页面只有一个文档,不幸的是,我们的帮助文档会导致代码崩溃。

最终目标是一次缓存8个页面,以改善用户体验。

代码语言:javascript
运行
复制
CFMutableDataRef consumerData = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGDataConsumerRef contextConsumer = CGDataConsumerCreateWithCFData(consumerData);

CGPDFPageRef page = CGPDFDocumentGetPage(sourceDocument, pageNumber);

const CGRect mediaBox = CGPDFPageGetBoxRect(page, kCGPDFCropBox);
CGContextRef pdfOutContext = CGPDFContextCreate(contextConsumer, &mediaBox, NULL);

CGContextDrawPDFPage(pdfOutContext, page); //If I comment out this line, no exception occurs

CGPDFPageRelease(page);
CGPDFContextEndPage(pdfOutContext);

CGPDFContextClose(pdfOutContext); //EXC_BAD_ACCESS
CGContextRelease(pdfOutContext);

(这是代码的简化版本,原始代码打开一个源文档和一个页面,检查pagectx上的null,然后将ctx写入新文档。)

如果不是绘制到PDF上下文,而是绘制到这样创建的UIGraphics上下文,这是没有问题的:

CGContextRef graphicsContext = UIGraphicsGetCurrentContext();

当我将其他东西绘制到PDF上下文中时,也没有问题。

此外,这适用于99%的文档和75%的违规文档中的页面。有问题的文档可在多个PDF查看器中正确呈现。

所以我不认为我的记忆有问题。我相当确信CGPDF代码中有一些错误(我只是在花了一周的时间来解决这个问题之后才这么说)。

我的问题是,有没有其他我应该/可以这样做的方式?

EN

Stack Overflow用户

发布于 2011-11-22 08:26:58

你要错过CGPDFContextBeginPage了。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8216450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档