我的應用程序需要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);