Objective c iOS 4.3 PDF文件呈现问题

Objective c iOS 4.3 PDF文件呈现问题,objective-c,ios,pdf,ios4,Objective C,Ios,Pdf,Ios4,我使用以下代码来绘制和旋转PDF文件。它在5.x上运行得非常好,但在iOS 4.3下,调试器中只显示一个白色页面,并显示一个错误: 无效的“内容”:不是流数组 错误发生在“CGContextDrawPDFPage(context,pdfPage);”之后 为什么它与iOS 5.x兼容,而与iOS 4.3.x兼容?我尝试了不同的PDF文件,但仍然得到了相同的结果 我如何克服这个问题 pdfpage的定义如下: - (void)setPage:(CGPDFPageRef)newPage {

我使用以下代码来绘制和旋转PDF文件。它在5.x上运行得非常好,但在iOS 4.3下,调试器中只显示一个白色页面,并显示一个错误:

无效的“内容”:不是流数组

错误发生在“CGContextDrawPDFPage(context,pdfPage);”之后

为什么它与iOS 5.x兼容,而与iOS 4.3.x兼容?我尝试了不同的PDF文件,但仍然得到了相同的结果

我如何克服这个问题

pdfpage的定义如下:

- (void)setPage:(CGPDFPageRef)newPage
{
    CGPDFPageRelease(self->pdfPage);
    self->pdfPage = CGPDFPageRetain(newPage);
}
发生这种情况的方法:

 -(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
    // First fill the background with white.
    CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
    CGContextFillRect(context,self.bounds);
    CGContextSaveGState(context);
    int rotate = CGPDFPageGetRotationAngle(pdfPage);

    switch (rotate) {
        case 0:
            CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
            CGContextScaleCTM(context, 1, -1);
            break;
        case 90:
            CGContextScaleCTM(context, 1.0, -1.0);
            CGContextRotateCTM(context, -M_PI / 2);
            break;
        case 180:
        case -180:
            CGContextScaleCTM(context, 1, -1);
            CGContextTranslateCTM(context, self.bounds.size.width, 0);
            CGContextRotateCTM(context, M_PI);
            break;
        case 270:
        case -90:
            CGContextTranslateCTM(context, self.bounds.size.height, self.bounds.size.width);
            CGContextRotateCTM(context, M_PI / 2);
            CGContextScaleCTM(context, -1, 1);
            break;
    }

    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
    CGContextScaleCTM(context, myScale,myScale);
    CGContextDrawPDFPage(context, pdfPage); // the error shows up right after executing this line
    CGContextRestoreGState(context);
}

根据PDF规范,页面字典中的/Contents条目可以是流对象或流对象数组。根据错误消息,iOS 4.3似乎没有正确实现PDF规范,它总是希望/Contents条目有一个流数组,而您的文件使用单个流对象。iOS 5可能已修复此问题。

首先尝试执行
CGPDFDocumentRetain(您的cgpdfdocumentref)

什么是“pdfPage”?检查其初始化是否正确。请注意,向下/向上投票无助于我解决问题@MitulNakum其初始化正确它可以与ios 5.x一起工作,但不能与ios 4.3.x一起工作我已经更新了代码。感谢您的帮助。我回到了apple pdf渲染示例,现在它也可以与ios 4.3一起使用。但我不明白是什么问题。不管怎么说,如果有人有问题,就拿苹果的例子来说吧。几个小时后,我试图找出两个样本(ZoomingPDFViewer)之间的区别,最后我找到了。在iOS 5之前,您需要保留对PDFDocument的引用,并在dealloc中发布它。在iOS 5之后,您可以在将CGPDFPageRef传递到TiledView之后释放。为什么?不知道。