2011-07-03 17 views
5

レイヤを描画するUIViewControllerを作成しようとしています。このUIViewControllerが主なものであれば正常に動作します。しかし、私は別のコントローラ内部でそれを初期化し、それはそれは次のようなエラーになり、メインコントローラのビューのサブビューとしてビューの追加しようとします(PDFPageViewControllerをここで drawLayer:inContext - インスタンスに送信された認識できないセレクタ

-[__NSCFType drawLayer:inContext:]: unrecognized selector sent to instance 0x155140 

は私のカスタムのUIViewControllerに関連するコードです):

- (void)loadDocument:(PDFDocument *)document 
{ 
    self._document = document; 

    CGRect pageRect = CGRectIntegral(CGPDFPageGetBoxRect(self._document.page, kCGPDFCropBox)); 

    pageRect.origin.x = (self.view.frame.size.width/2) - (pageRect.size.width/2) - 35; 

    CATiledLayer *tiledLayer = [CATiledLayer layer]; 
    tiledLayer.delegate = self; 
    tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0); 
    tiledLayer.levelsOfDetail = 1000; 
    tiledLayer.levelsOfDetailBias = 1000; 
    tiledLayer.frame = pageRect; 

    contentView = [[UIView alloc] initWithFrame:pageRect]; 
    [contentView.layer addSublayer:tiledLayer]; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin = CGPointZero; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:viewFrame]; 
    scrollView.delegate = self; 
    scrollView.contentSize = pageRect.size; 
    scrollView.maximumZoomScale = 1000; 
    [scrollView addSubview:contentView]; 

    [self.view addSubview:scrollView]; 

    NSLog(@"%@", self); // Just checking if there's nothing overwriting the layer's delegate 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return contentView; 
} 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if(self._document) { 
     CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
     CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
     CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(self._document.page, kCGPDFCropBox, layer.bounds, 0, true)); 
     CGContextDrawPDFPage(ctx, self._document.page); 
    } 
} 

drawLayer方法があるとのCALayerのデリゲートは自己です。

そして、これは私が私のメインコントローラ上でそれを呼び出す方法です:私はこれに適切な方法を

pageViewController = [[[PDFPageViewController alloc] initWithNibName:NULL bundle:NULL] autorelease]; 
[pageViewController loadDocument:self.document]; 

[self.view addSubview:[pageViewController view]]; 

やっていないだろうか?なぜ私は私のメインコントローラ上にレイヤーを描画し、描画がPDFViewController上で行われた場合、エラーが発生する場合、これがうまく動作するのか理解できません。メソッドはそこにあり、代理人はの自己です。では、なぜセレクターに問題がありますか?

+0

これはメモリ管理の問題のようです。 NSZombieEnabledを試しましたか?あなたは何かを過剰にリリースしている可能性はありますか? ARCを使用していますか? – jtbandes

+0

@jbandes - ありがとう! NSZombieEnabledを使用して、メッセージがビューコントローラの割り当て解除されたインスタンスに送信されたことを確認した後、オーバーリリースを修正するように手続きしました。私はそれをマークすることができ、賞金を取ることができるようにこの質問への回答を投稿してください。 – Raphael

+0

ありがとう、私は助けてうれしい!私は賞金を別に割り当てる必要があると思います。賞金は、それが割り当てられていないのでマーキングするだけです。 – jtbandes

答えて

3

[それが答えであることが判明したので、コメントから再掲載!]

これは、メモリ管理の問題のように聞こえます。 NSZombieEnabledを試しましたか?あなたは何かを過剰にリリースしている可能性はありますか? ARCを使用していますか?

関連する問題