6

Probé anulando el valor por defecto initWithNibName designado inicializador de una subclase UIViewController así:UIViewController subclase no init llama cuando se carga de punta

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 

También he incluido su definición en el archivo de cabecera. Sin embargo, cuando mi pliegue Delegado de aplicación carga el controlador de vista, el inicializador no se invoca, solo -viewDidLoad.

¿Cómo funciona el nib magic instanciar mi controlador de vista? ¿Por qué todas las plantillas XCode estado

// El inicializador designado. Anule si crea el controlador mediante programación y desea realizar una personalización que no sea apropiada para viewDidLoad.

¿Es correcto que no se llame a mi initWithNibName cuando se carga el viewcontroller desde otro plumín?

Respuesta

17

Debe colocar su código de inicialización dentro del método awakeFromNib para que se ejecute cuando se carga desde Nib. El archivo Nib contiene una versión archivada de los objetos que contiene, por lo que, en principio, no es necesario volver a inicializarlos.

+5

Además, '-initWithCoder:' es el método init que se invoca cuando algo instancia de un plumín. – Wevah

+0

(Leyendo nuevamente la pregunta, sin embargo, '-wakeFromNib' es lo que se quiere aquí.) – Wevah

+2

¿Por qué -wakeFromNib en vez de -viewDidLoad? – Elliot

Cuestiones relacionadas