2012-01-13 24 views
6

He creado una clase 'abc' que es una subclase de UIViewController. En el momento de crearlo, hice clic en la opción para crear un xib automáticamente. Ahora el xcode crea 3 archivos para mí 1. abc.h 2. abc.m 3. abc.xib.¿Cómo se carga el xib eliminado?

Ahora cada vez que creo un objeto de clase abc como abc * a = [abc alloc];

Incluso cuando no estoy inicializando el objeto con initiwithNibName y usándolo, está cargando el archivo xib. Entonces, ¿cómo este archivo xib se asoció con el objeto abc? E incluso si eliminé abc.xib, también carga ese archivo xib. No pude entender desde dónde está cargando el archivo xib, si no está presente en el espacio del proyecto. ¿Y dónde se almacena la asociación de xib y el controlador?

Gracias de antemano.

+0

¿Lo ha eliminado también de la carpeta? o solo una referencia del árbol del grupo? –

+0

lo moví a la basura. ¿es lo mismo que eliminarlo de la carpeta? – user1147070

+0

si lo elimina del árbol del grupo. obtienes dos opciones ... una es eliminar ref y la otra es mover a trashl ... verifica si el archivo aún está en tu carpeta –

Respuesta

8

Lo que sucede es que la implementación predeterminada de initWithNibName:bundle: busca en Main Bundle un archivo Nib que tiene el mismo nombre que su clase View Controller. Esto sucede si selecciona la opción para crear el Nib automáticamente o no. Consulte la documentación de UIViewController (la parte de discusión de initWithNibName:bundle:).

Ahora el método initWithNibName:bundle: es el inicializador por defecto de UIViewController, lo que significa que incluso si no lo usa directamente (digamos que usa init) se llamará de todas maneras.

Finalmente, incluso si elimina el archivo Nib de XCode, por algún motivo (no estoy seguro por qué) no se elimina del Main Bundle (al menos en el simulador). Incluso si limpia & construye el proyecto, se queda allí. La solución que uso para eliminar por completo el archivo Nib es eliminar la aplicación del simulador, luego limpiar de nuevo & compilación.

Espero que esto ayude!

+0

¡esto funcionó para mí! –

1

El xib probablemente todavía está en su área compilada, por lo que debe realizar una limpieza para deshacerse de él por completo. (Producto >> Limpio). El método init predeterminado de UIViewControllers buscará automáticamente un xib del mismo nombre, por lo que todavía está asignando ese xib. Una vez que lo limpie, se detendrá.

Referencia: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/initWithNibName:bundle:

Nota esta parte: Si especifica cero para el parámetro nibName, debe reemplazar el método loadView y crear sus puntos de vista allí o usted debe proporcionar un archivo semilla en su paquete cuyo nombre (sin la extensión .nib) coincide con el nombre de su clase de controlador de vista. (En este último caso, el nombre de clase se convierte en el nombre almacenado en la propiedad nibName.) Si no hace nada de esto, el controlador de vista no podrá cargar su vista.

+0

no, yo limpié el proyecto, incluso yo vacié cachés pero aún está cargando xib – user1147070

+0

¿Lo eliminó del sistema de archivos o simplemente de su proyecto (eliminar la opción de referencia)? –

+0

y supongamos que no he llamado a initWithNibName en mi objeto controoler? ¿Entonces también asociará el archivo de punta (que coincide con el nombre de mi vista Controlador) con el controlador? – user1147070

Cuestiones relacionadas