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