2011-08-04 20 views
7

tengo una vista de tabla celular basada en la punta de la que he creado en constructor de interfaz. I define la clase de la célula de vista de tabla a FooTableViewCell que se extiende desde UITableViewCell.¿por qué el método init-de una celda de tabla basada en la punta de la costumbre no consigo llamado

En FooTableViewCell puedo reemplazar el método init así:

-(id)init{ 

    if ((self = [super init])){ 
     // My init code here 
    } 
    return self; 
} 

ahora yo esperaba que mi es llamado, cuando se crea una instancia. Sin embargo, se muestra la vista de tabla, pero nunca se llama al método.

Podría solucionar este problema, pero me gustaría entenderlo completamente y para mí no está claro cómo un objeto puede entrar a vivir sin que se llame al método init.

+0

si carga su celular de archivo nib el camino informados que no es necesario 'célula = [[alloc StationAndTwoProgramsCell] init]; "Línea - como los que crea células alloc/init se sobreescriben, de todos modos en la línea siguiente 'célula = ...' y que también dará lugar a pérdida de memoria. – Vladimir

Respuesta

19

Al tratarse de inicialización no archivada pasa por un camino ligeramente diferente.

En lugar de ser llamado -(id)init-(id)initWithCoder:(NSCoder*)aDecoder se llamará. En este punto, puntos de venta no están conectados, si necesita tener acceso a los puntos de venta puede anular -(void)awakeFromNib que se llamará después de que el objeto se ha conectado.

+0

¡Eres un salvavidas! He intentado encontrar una forma de 'default' de todos mis colores de fondo de celdas personalizados desde una superclase personalizada. Esto funcionó muy bien! –

6

Cuando el objeto se está cargando desde el archivo semilla entonces su método se llama -awakeFromNib - usted puede poner su código de inicialización allí:

- (void)awakeFromNib{ 
    // Init code 
} 
+0

¡Eso fue rápido! Gracias – Besi

Cuestiones relacionadas