2013-10-22 45 views
1

我的应用程序需要PDF并为给定数量的页面生成缩略图。CGContextDrawPDFPage在OS X上随EXC_BAD_ACCESS随机崩溃10.8

一切都在OS X 10.7

在OS X 10.8细,某些页面上,在某些PDF文件(在1400测试的次数为7个文件用一个单一的“违规”页)它无法呈现当致电时,产生EXC_BAD_ACCESS CGContextDrawPDFPage

有时(1比10)它成功。但是,该文件页面的90%会导致崩溃。

相关的代码,下面张贴,则重复为每个PAGENUMBER一个循环来进行渲染所提供的pdfDocument的。每次迭代产生一个保存到数组中并稍后使用的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

它是在OS X引入PDFKit的一个错误10.8

该错误已被固定在OS X 10.9