2012-03-31 15 views
-1

次のコードを使用して、PDFファイルを描画して回転します。それはiOS 5.xのと完全に正常に動作しますが、iOSの4.3の下でちょうど白ページには、デバッガでエラーで現れる:iOS 4.3 PDFファイルレンダリングの問題

無効 `内容:ストリームのない配列。

「CGContextDrawPDFPage(context、pdfPage);」の直後にエラーが発生します。

なぜiOS 5.xでは動作しますが、4.3.xでは動作しませんか?私は別のPDFファイルを試しましたが、私は同じ結果を得ました。

どのようにこの問題を解決できますか?それが起こる方法

- (void)setPage:(CGPDFPageRef)newPage 
{ 
    CGPDFPageRelease(self->pdfPage); 
    self->pdfPage = CGPDFPageRetain(newPage); 
} 

pdfpageのように定義されたPDF仕様書によれば

-(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); 
} 
+1

「pdfPage」とは何ですか?それが正しく初期化されているかどうかを確認 –

+0

投票のダウン/アップは問題の解決に役立たないことにご注意ください! –

+0

@MitulNakumは適切に初期化されていますが、ios 5.xでは動作しますが、ios 4.3.xでは動作しません。コードを更新しました。助けてくれてありがとう。 –

答えて

0

、ページ辞書に/コンテンツエントリは、ストリームオブジェクトまたはANのいずれかであることができますストリームオブジェクトの配列このエラーメッセージに基づいて、iOS 4.3ではPDF仕様が正しく実装されていないようですが、/ Contentsエントリのストリームの配列が常に期待され、ファイルには単一のストリームオブジェクトが使用されています。 iOS 5がこの問題を修正した可能性があります。

+0

アップルのpdfレンダリングの例に戻ってきましたが、現在はios 4.3でも動作しています。しかし、私はそれが何の問題か分からなかった。とにかく誰かが問題を抱えているなら、リンゴの例でアルークを取る –

+1

2つのサンプル(ZoomingPDFViewer)の間に何が違うのかを調べる時間がたってから、ついにそれを見つけました。 iOS 5より前には、PDFDocumentへの参照を保持し、それをdeallocで解放する必要があります。 iOS 5の後、CGPDFPageRefをTiledViewに渡した直後に解放することができます。どうして ?わからない。 – ipodishima

0

まずはCGPDFDocumentRetain(yourCGPDFDocumentRef)を実行してください。