2010-10-15 9 views
47

ich die folgende Methode für meine Klasse, die eine Feder-Datei laden will und instanziiert das Objekt:Ziel C - Wie verwende ich initWithCoder Methode?

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

Wie man ein Objekt dieser Klasse nicht instanziiert? Was ist das NSCoder? Wie kann ich es erstellen?

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

Antwort

40

Sie auch die folgende Methode definieren, müssen wie folgt lauten:

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

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; 

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

Und in der initWithCoder Methode initialisieren wie folgt:

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

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

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

    return self; 
} 

Sie kann das Objekt Standard Weg initialisieren dh

CustomObject *customObject = [[CustomObject alloc] init]; 
+4

Meine Hauptfrage ist: "Also basierend auf dieser Init-Methode wie instanziieren Sie ein Objekt dieser Klasse?" – aryaxt

+0

Diese Methoden müssen definiert werden, wenn Sie das Objekt zum Serialisieren und Deserialisieren verwenden. Sie können das Objekt mit der normalen Init-Methode initialisieren – SegFault

+0

Vielen Dank – pnizzle