objective c - Objetivo C-¿Cómo uso el método initWithCoder?
objective-c cocoa-touch (2)
La clase NSCoder
se utiliza para archivar / desarchivar (marshal / unmarshal, serialize / deserialize) de objetos.
Este es un método para escribir objetos en secuencias (como archivos, sockets) y poder recuperarlos más tarde o en un lugar diferente.
Le sugiero que lea http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html
Tengo el siguiente método para mi clase que intenta cargar un archivo de nib y crear una instancia del objeto:
- (id)initWithCoder:(NSCoder*)aDecoder
{
if(self = [super initWithCoder:aDecoder]) {
// Do something
}
return self;
}
¿Cómo se instancia uno un objeto de esta clase? ¿Qué es este NSCoder
? ¿Cómo puedo crearlo?
MyClass *class = [[MyClass alloc] initWithCoder:aCoder];
También debe definir el siguiente método de la siguiente manera:
- (void)encodeWithCoder:(NSCoder *)enCoder {
[super encodeWithCoder:enCoder];
[enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];
// Similarly for the other instance variables.
....
}
Y en el método initWithCoder inicialice de la siguiente manera:
- (id)initWithCoder:(NSCoder *)aDecoder {
if(self = [super initWithCoder:aDecoder]) {
self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];
// similarly for other instance variables
....
}
return self;
}
Puede inicializar el objeto de manera estándar, es decir
CustomObject *customObject = [[CustomObject alloc] init];