2013-10-22 43 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