CGContextDrawPDFPage在OS X 10.8上随机崩溃,EXC_访问错误

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

我的应用程序获取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中修复