2012-02-20 13 views
6

El valor predeterminado init método de firma en los controladores de vista generada XCode-es:¿Qué significa nibNameOrNil realmente?

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ } 

que he visto estos inicializado con ambos valores suministrados, sólo el nombre de punta (con el paquete como nil), o simplemente nil como ambos. Todos parecen funcionar.

¿Cómo se maneja realmente el UIViewController self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];? ¿Hay una desventaja al pasar nil para ambos valores?

Respuesta

9

Si pasa nil como nibName, el método buscará una punta con el mismo nombre de archivo que su controlador de vista.

Por ejemplo, si tiene un controlador de vista llamado MyViewController, buscará un archivo nib MyViewController.xib.

Si no se encuentra la punta, deberá anular el método loadView para crear y asignar una UIView a la salida de visualización del controlador.

- (void)loadView 
{ 
    UIView *theView = [[UIView alloc] ... 
    // Setup the main view 
    self.view = theView; 
} 
+0

Exactamente lo que estaba buscando. ¡Gracias! – Tim

1

Desde el docs:

nibName:

Si especifica cero para el parámetro nibName y no se sobreescribe el método loadView, las búsquedas controlador de vista de un archivo semilla usando otra medio. Ver nibName.

nibBundle:

El paquete en el que para buscar el archivo semilla. Este método busca primero el archivo nib en los directorios de proyectos específicos del idioma del paquete, seguidos por el directorio de Recursos. Si es nulo, este método busca el archivo de punta en el paquete principal.

Cuestiones relacionadas