2011-08-04 6 views
7

क्यों नहीं कहा जाता है मेरे पास इंटरफ़ेस बिल्डर में बनाया गया एक निब-आधारित टेबल व्यू सेल है। मैंने तालिका दृश्य कक्ष की कक्षा FooTableViewCell पर सेट की है जो UITableViewCell से फैली हुई है।एक कस्टम निब-आधारित टेबल सेल की init-method को

FooTableViewCell में मैं इस तरह init विधि ओवरराइड:

-(id)init{ 

    if ((self = [super init])){ 
     // My init code here 
    } 
    return self; 
} 

अब मैं, उम्मीद है कि मेरी कहा जाता हो जाता है जब यह instantiated जा रहा है। हालांकि तालिका दृश्य प्रदर्शित हो जाता है लेकिन विधि कभी नहीं कहा जाता है।

मैं इसके आसपास काम कर सकता हूं लेकिन मैं इसे पूरी तरह से समझना चाहता हूं और मेरे लिए यह स्पष्ट नहीं है कि init विधि के बिना कोई वस्तु कैसे रह सकती है।

+0

यदि आप अपने सेल को एनआईबी फाइल से लोड करते हैं तो आपको 'सेल = [[स्टेशन और दोप्रोग्रामसेल ऑलोक] init] की आवश्यकता नहीं है; 'लाइन - जैसा कि एलोक/इनिट सेल के साथ बनाया गया है, अगली पंक्ति' सेल = ... 'में वैसे भी अधिलेखित हो जाएगा और इससे स्मृति रिसाव भी होगा। – Vladimir

उत्तर

19

जब संग्रह से निकाला गया प्रारंभ किया जा रहा है एक अलग पथ के माध्यम से चला जाता है।

के बजाय -(id)initWithCoder:(NSCoder*)aDecoder कहा जा रहा है। इस बिंदु पर दुकानों को झुकाया नहीं जाता है, अगर आपको आउटलेट तक पहुंच की आवश्यकता है तो आप को ओवरराइड कर सकते हैं जिसे ऑब्जेक्ट को जोड़ने के बाद बुलाया जाएगा।

+0

आप एक lifesaver हैं! कस्टम सुपरक्लास से मेरे सभी कस्टम सेल पृष्ठभूमि रंगों को 'डिफ़ॉल्ट' करने का एक तरीका ढूंढने का प्रयास कर रहे थे। यह बहुत अच्छा काम किया! –

6

वस्तु निब फ़ाइल तो इसकी -awakeFromNib विधि कहा जाता है से लोड किया जा रहा है जब - आप अपने initialisation कोड वहाँ रख सकते हैं:

- (void)awakeFromNib{ 
    // Init code 
} 
+0

वह जल्दी था! धन्यवाद – Besi