2010-10-15 8 views
47

मैं मेरी कक्षा के लिए निम्न विधि है जो एक निब फ़ाइल लोड और वस्तु का दृष्टांत का इरादा रखता है:उद्देश्य सी - मैं initWithCoder विधि का उपयोग कैसे करूं?

- (id)initWithCoder:(NSCoder*)aDecoder 
{ 
    if(self = [super initWithCoder:aDecoder]) { 
     // Do something 
    } 
    return self; 
} 

एक इस वर्ग की एक वस्तु कैसे दृष्टांत करता है? यह NSCoder क्या है? मैं इसे कैसे बना सकता हूं?

MyClass *class = [[MyClass alloc] initWithCoder:aCoder]; 

उत्तर

40

तुम भी इस प्रकार निम्न विधि परिभाषित करने की आवश्यकता को पढ़ने के लिए सुझाव है:

- (void)encodeWithCoder:(NSCoder *)enCoder { 
    [super encodeWithCoder:enCoder]; 

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; 

    // Similarly for the other instance variables. 
    .... 
} 

और initWithCoder विधि में प्रारंभ इस प्रकार है:

- (id)initWithCoder:(NSCoder *)aDecoder { 

    if(self = [super initWithCoder:aDecoder]) { 
     self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY]; 

     // similarly for other instance variables 
     .... 
    } 

    return self; 
} 

आप ऑब्जेक्ट मानक तरीका यानी

प्रारंभ कर सकते हैं
+4

मेरा मुख्य प्रश्न यह है: "इस इस विधि के आधार पर आप इस वर्ग के किसी ऑब्जेक्ट को कैसे चालू करते हैं?" – aryaxt

+0

यदि आप serializing और deserializing के लिए ऑब्जेक्ट का उपयोग कर रहे हैं, तो इन विधियों को परिभाषित करने की आवश्यकता है। आप सामान्य init विधि – SegFault

+0

का उपयोग करके ऑब्जेक्ट को प्रारंभ कर सकते हैं, आपको बहुत धन्यवाद – pnizzle

15

NSCoder वर्ग को संग्रहीत/वस्तुओं के संग्रह से निकालें (मार्शल/unmarshal, क्रमानुसार/deserialize) किया जाता है।

यह धाराओं (जैसे फाइलों, सॉकेट) पर वस्तुओं को लिखने और उन्हें बाद में या किसी अन्य स्थान पर पुनर्प्राप्त करने में सक्षम होने का एक तरीका है।

मैं तुम्हें http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html