CGContextDrawPDFPage在OS X 10.8上随机崩溃,EXC_访问错误
我的应用程序获取PDF并生成给定页面数的缩略图 在OS X 10.7上一切正常 在OS X 10.8上,在某些页面上,在某些PDF上(在1400测试中,计数为7个文档,只有一个“违规”页面),调用CGContextDrawPDFPage时,它无法呈现,导致EXC_错误访问 有时(10比1)它会成功。但90%的时间该文档上的页面会导致崩溃 下面发布的相关代码在循环中重复,用于提供的pdfDocument的每个pageNumber。每次迭代都会生成一个CGImageRefimgRef,该imgRef保存到一个数组中,稍后使用CGContextDrawPDFPage在OS X 10.8上随机崩溃,EXC_访问错误,pdf,core-graphics,osx-mountain-lion,exc-bad-access,Pdf,Core Graphics,Osx Mountain Lion,Exc Bad Access,我的应用程序获取PDF并生成给定页面数的缩略图 在OS X 10.7上一切正常 在OS X 10.8上,在某些页面上,在某些PDF上(在1400测试中,计数为7个文档,只有一个“违规”页面),调用CGContextDrawPDFPage时,它无法呈现,导致EXC_错误访问 有时(10比1)它会成功。但90%的时间该文档上的页面会导致崩溃 下面发布的相关代码在循环中重复,用于提供的pdfDocument的每个pageNumber。每次迭代都会生成一个CGImageRefimgRef,该imgRef
假设崩溃发生在第30页 如果我从28渲染到38就可以了 如果我渲染从27到37崩溃 如果我只渲染30就可以了 某些页面集(包含有问题的页面集)崩溃。其他人则不然
这似乎是PDFKit 10.8中的一个bug。。。(当被要求呈现同一文档的多个页面时,在尝试进行一些内部缓存优化时会把事情搞砸?) 当然,我不能排除代码中的bug,但这似乎不太可能 任何关于如何解决这一问题的想法都将不胜感激
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 );
cgpdfageref pdfPage=CGPDFDocumentGetPage
(PDF文件,
页码);
如果(!pdfPage)返回;
CGPDFPageRetain(pdfPage);
CGRect rect=CGPDFPageGetBoxRect
(PDF页,
kCGPDFCropBox);
CGColorSpaceRef imgColorSpace=CGColorSpaceCreateDeviceRGB();
CGContextRef contextRef=CGBitmapContextCreate
(空,
(尺寸)(矩形尺寸、宽度),
(尺寸)(垂直尺寸、高度),
8.
((尺寸)(矩形尺寸宽度))*4,
imgColorSpace,
KCGIMAGEAlphaPremultipledLast);
cG色谱仪酶(imgColorSpace);
如果(!contextRef)返回;
CGContextDrawPDFPage(contextRef,pdfPage);// 这是OSX10.8中引入的PDFKit的一个bug
该漏洞已在OSX10.9中修复