2009-06-03 13 views
6

Tengo un controlador de vista que se crea a través de initWithNibName, y descubrí que awakeFromNib no se llama. ¿Se llama a awakeFromNib solo cuando el controlador de vista se desarchiva del Nib? (es decir, se llama a initWithCoder)awakeFromNib no se llama en mi ViewController

Respuesta

4

UIViewController carga su vista perezosamente, solo cuando es necesario para la visualización. Esto sirve tanto para crear de forma programática la vista utilizando -loadView o unarchiving desde un plumín.

Puede hacer que la vista se cargue haciendo referencia a la propiedad de vista de UIViewController.

+0

Gracias por el consejo de "referencia de la propiedad de la vista", eso era exactamente lo que estaba buscando. – Cyrille

17

Creo que lo que estás buscando es viewDidLoad. awakeFromNib solo se invoca en los objetos que se cargan desde el plumín. El controlador en sí recibe viewDidLoad:. ¡Ya que está llamando al initWithNibName:bundle:, en realidad no se ha extraído del anzuelo!

+1

Soy consciente del hecho de que se llamará a viewDidLoad, pero no estaba seguro de por qué awakeFromNib no lo estaba, porque el controlador de vista es un propietario de archivo de NIB, por lo que se desarchivará y se conectarán IBOutlet e IBAction, o así que pensé. – Boon

+1

El propietario del archivo es un proxy para UIViewController, no una instancia real. Presumiblemente, el controlador de vista se crea una instancia fuera del alcance de la NIB y luego se "conecta" según las relaciones especificadas en el objeto proxy: el propietario del archivo. – teabot

2

awakeFromNib no se llama para objetos de marcador de posición como Propietario de archivo y Primer Respondedor en iOS. Ver # 4 en el Object Loading Process Docs