我的应用程序采用PDF并为给定数量的页面生成缩略图。
OS X 10.7上的一切都很好
在OS X 10.8上,在某些页面上,在某些PDF上(在1400测试中,计数是7个文档,只有一个“冒犯”页面),在调用 CGContextDrawPDFPage 时无法呈现EXC_BAD_ACCESS
有时(1比10)它成功了。但是,该文件页面的90%会导致崩溃。
下面发布的相关代码会针对每个 pageNumber 循环重复,以提供所提供的 pdfDocument 。每次迭代都会产生一个 CGImageRef imgRef,它将保存到一个数组中并在以后使用。
假设第30页发生了崩溃。
如果我从28到38渲染是可以的。
如果我从27到37渲染崩溃。
如果我渲染只有30就一直没问题。
包含违规的一些页面崩溃。其他没有。
这似乎是PDFKit 10.8中的一个错误...(当被要求渲染同一文档的多个页面时,尝试进行一些内部缓存优化时搞砸了什么?)
当然,我不能排除代码中的错误,但似乎不太可能。
任何关于如何解决这个问题的想法都将受到赞赏。
CGPDFPageRef pdfPage = CGPDFDocumentGetPage
( pdfDocument,
pageNumber );
if( !pdfPage ) return;
CGPDFPageRetain(pdfPage);
CGRect rect = CGPDFPageGetBoxRect
( pdfPage,
kCGPDFCropBox);
CGColorSpaceRef imgColorSpace = CGColorSpaceCreateDeviceRGB ( );
CGContextRef contextRef = CGBitmapContextCreate
( NULL,
(size_t) (rect.size.width),
(size_t) (rect.size.height),
8,
((size_t) (rect.size.width))*4,
imgColorSpace,
kCGImageAlphaPremultipliedLast );
CGColorSpaceRelease ( imgColorSpace );
if( !contextRef ) return;
CGContextDrawPDFPage ( contextRef, pdfPage ); // <==== EXC_BAD_ACCESS
CGImageRef imgRef = CGBitmapContextCreateImage
( contextRef );
CFRelease ( contextRef );
CGPDFPageRelease( pdfPage );
答案 0 :(得分:0)
这是OS X 10.8中引入的PDFKit的错误
该错误已在OS X 10.9中修复