2011-07-03 10 views
5

मैं एक UIViewController बनाने की कोशिश कर रहा हूं जो एक परत खींचता है और यह ठीक काम करता है यदि यह UIViewController मुख्य है। हालांकि, अगर मैं एक नियंत्रक के अंदर यह प्रारंभ और फिर इसे मुख्य नियंत्रक का दृष्टिकोण यह निम्न त्रुटि में परिणाम की एक उप दृश्य के रूप में दृश्य है जोड़ने का प्रयास:drawLayer: inContext - अज्ञात चयनकर्ता उदाहरण के लिए भेजा गया

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

यहाँ मेरी कस्टम UIViewController के लिए प्रासंगिक कोड है (PDFPageViewController):

- (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]]; 

Am मैं इस उचित तरीके से नहीं कर रही:

और यह कैसे मैं अपने मुख्य नियंत्रक पर इसे कहते है? मुझे समझ में नहीं आ रहा है कि अगर मैं अपने मुख्य नियंत्रक पर परत खींचता हूं तो यह ठीक काम क्यों करता है और यदि पीडीएफ व्यू कंट्रोलर पर ड्रॉ बनाया जाता है तो यह एक त्रुटि पर पड़ता है। विधि वहां है, प्रतिनिधि स्वयं है। तो चयनकर्ता क्यों विफल रहा है?

+0

यह स्मृति प्रबंधन समस्या की तरह लगता है। क्या आपने NSZombieEnabled की कोशिश की है? क्या कोई मौका है कि आपने कुछ खत्म कर दिया है? क्या आप एआरसी का उपयोग कर रहे हैं? – jtbandes

+0

@jbandes - बहुत बहुत धन्यवाद! NSZombieEnabled के साथ मैंने देखा जैसे आपने कहा था कि संदेश मेरे व्यू कंट्रोलर के एक अस्वीकृत उदाहरण में भेजा गया था और फिर मैंने ओवर-रिलीज़िंग को ठीक करने की प्रक्रिया की। कृपया इस प्रश्न का उत्तर पोस्ट करें ताकि मैं इसे चिह्नित कर सकूं और आप बक्षीस ले सकते हैं। – Raphael

+0

धन्यवाद, खुशी है कि मैं मदद कर सकता हूँ! मुझे लगता है कि आपको अलग-अलग बक्षीस को असाइन करना होगा, बस इसे चिह्नित करना होगा क्योंकि उत्तर इसे असाइन नहीं करता है। – jtbandes

उत्तर

3

[टिप्पणी से फिर से तैनात क्योंकि यह पता चला जवाब हो सकता है!]

यह एक स्मृति प्रबंधन समस्या की तरह लगता है। क्या आपने NSZombieEnabled की कोशिश की है? क्या कोई मौका है कि आपने कुछ खत्म कर दिया है? क्या आप एआरसी का उपयोग कर रहे हैं?

संबंधित मुद्दे

 संबंधित मुद्दे