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