2010-10-15 17 views
47

Tengo el método siguiente para mi clase que tiene la intención de cargar un archivo de punta y una instancia del objeto:Objetivo C - ¿Cómo uso el método initWithCoder?

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

¿Cómo se puede crear un objeto de esta clase? ¿Qué es esto NSCoder? ¿Cómo puedo crearlo?

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

Respuesta

40

También es necesario 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 inicializar 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; 
} 

Usted puede inicializar el objeto de manera estándar, es decir,

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

mi pregunta principal es: "por lo tanto, basado en este método init, ¿cómo instanciar un objeto de esta clase?" – aryaxt

+0

Estos métodos deben definirse si está utilizando el objeto para serializar y deserializar. Puedes inicializar el objeto usando el método init normal – SegFault

+0

muchas gracias – pnizzle