2010-02-02 15 views

Respuesta

33

Deseará implementar el NSCoding protocol. Implemente initWithCoder: y encodeWithCoder: y su clase personalizada funcionará con NSKeyedArchiver y NSKeyedUnarchiver.

Su initWithCoder: debería tener este aspecto:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super init]) // this needs to be [super initWithCoder:aDecoder] if the superclass implements NSCoding 
    { 
     aString = [[aDecoder decodeObjectForKey:@"aString"] retain]; 
     anotherString = [[aDecoder decodeObjectForKey:@"anotherString"] retain]; 
    } 
    return self; 
} 

y encodeWithCoder:

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    // add [super encodeWithCoder:encoder] if the superclass implements NSCoding 
    [encoder encodeObject:aString forKey:@"aString"]; 
    [encoder encodeObject:anotherString forKey:@"anotherString"]; 
} 
+1

+1 Es posible que tenga que llamar '[initWithCoder súper: aDecoder]' 'o [SUPER encodeWithCoder: codificador ] 'dependiendo de qué clase esté subclasificando. =) –

+0

¡Do! Buen hallazgo - arreglado. –

+0

Tengo una pregunta sobre las mejores prácticas ... ¿Debo hacer que la clase sea serializable o puedo dejarla en manos del desarrollador de la interfaz de usuario para serializarla en cualquier salida deseada? – Patricia

Cuestiones relacionadas