Obiettivo C – Come si usa il metodo initWithCoder?

Ho il seguente metodo per la mia class che intende caricare un file di pennino e creare un’istanza dell’object:

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

Come si crea un’istanza di un object di questa class? Cos’è questo NSCoder ? Come posso crearlo?

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

È 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; } 

È ansible inizializzare il modo standard dell’object, ad es

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

La class NSCoder viene utilizzata per archiviare / annullare l’archiviazione (marshall / unmarshal, serialize / deserialize) degli oggetti.

Questo è un metodo per scrivere oggetti su flussi (come file, socket) ed essere in grado di recuperarli successivamente o in un posto diverso.

Ti suggerisco di leggere http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html