2011-07-03 5 views
5

레이어를 그리고 그 UIViewController가 주 UI 인 경우 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를 사용하면 메시지가 내 View Controller의 할당 해제 된 인스턴스로 전송되었다는 메시지를 보았습니다. 그런 다음 과도한 문제를 해결하기 위해 조치를 취했습니다. 이 질문에 대한 답변을 게시하여 표시하고 현상금을받을 수 있도록하십시오. – Raphael

+0

감사합니다. 기꺼이 도와 드리겠습니다! 나는 당신이 별도로 현상금을 할당해야한다고 생각합니다. 대답은 그것을 지정하지 않았기 때문에 그것을 표기합니다. – jtbandes

답변

3

는 [가 해답이 될 밝혀졌다 때문에 코멘트에서 재 - 게시!]

를이 메모리 관리 문제처럼 들린다. NSZombieEnabled를 사용해 보셨습니까? 당신이 뭔가를 과도하게 발표했을 가능성은 있습니까? ARC를 사용하고 있습니까?

관련 문제