Objetivo C – Como eu uso o método initWithCoder?

Eu tenho o seguinte método para minha class que pretende carregar um arquivo de nib e instanciar o object:

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

Como um instanciar um object dessa class? O que é esse NSCoder ? Como posso criá-lo?

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

Você também precisa definir o seguinte método da seguinte maneira:

 - (void)encodeWithCoder:(NSCoder *)enCoder { [super encodeWithCoder:enCoder]; [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; // Similarly for the other instance variables. .... } 

E no método initWithCoder, inicialize da seguinte forma:

 - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super initWithCoder:aDecoder]) { self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY]; // similarly for other instance variables .... } return self; } 

Você pode inicializar o caminho padrão do object, ou seja,

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

A class NSCoder é usada para arquivar / desarquivar (marshal / unmarshal, serializar / desserializar) de objects.

Este é um método para escrever objects em streams (como arquivos, sockets) e ser capaz de recuperá-los mais tarde ou em um lugar diferente.

Sugiro que você leia http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html