2010-10-15 8 views
47

Ho il seguente metodo per la mia classe che intende caricare un file pennino e un'istanza dell'oggetto:Objective C - Come si utilizza il metodo initWithCoder?

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

Come si fa a un'istanza di un oggetto di questa classe? Che cos'è questo NSCoder? Come posso crearlo?

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

risposta

40

È inoltre necessario definire il seguente metodo come segue:

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

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; 

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

E nel metodo initWithCoder inizializzare come segue:

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

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

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

    return self; 
} 

È può inizializzare l'oggetto modo standard ie

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

la mia domanda principale è: "così basato su questo metodo di init come si crea un'istanza di un oggetto di questa classe?" – aryaxt

+0

Questi metodi devono essere definiti se si utilizza l'oggetto per la serializzazione e deserializzazione. È possibile inizializzare l'oggetto utilizzando il metodo init normale – SegFault

+0

grazie mille – pnizzle