2009-06-11 10 views
6

En una de las vistas que inicio programáticamente, veo 5 llamadas diferentes a 'loadView/viewdidLoad' pero no entiendo por qué se están llamando a esta cantidad. ¿Puede alguien explicarme la mecánica detrás de esto?Llamadas múltiples a viewDidLoad/loadView

lanzo la vista en la matriz UIViewController (parte de una aplicación TabBar + NavigationBar) ejemplo de la siguiente manera:

MainEditController *editController = [[MainEditController alloc] initWithNibName:@"MainEditView" bundle:nil];   
[self.navigationController pushViewController:editController animated:YES];   
[editController release]; 

entonces log MainEditController'sviewDidLoad y loadView métodos (e invocando sus respectivos métodos súper) .

El 'MainEditView' plumín contiene 3 artículos: de -File propietario (de tipo MainEditController), -En primer respondedor (de tipo UIResponder) -View (de tipo UIView)

La salida de vista está conectado a el propietario del archivo y la vista no tienen elementos. Lo que pretendo hacer es agregar varias vistas secundarias a la vista principal y mostrar una de las subvistas en función de una condición específica.

Pensé que tanto viewDidLoad como loadView se llamarían tantas vistas (1 en este caso) dentro del controlador, pero eso no parece ser una suposición válida.

+0

¿Hay alguna posibilidad de que puede publicar su función MainEditController loadView? – marcc

Respuesta

14

es su método loadView llamando [super loadView]? De lo contrario, es probable que la propiedad de vista no esté configurada correctamente, y para que se acceda al siguiente time .view, intenta cargarlo nuevamente.

puñalada en la oscuridad, pero sin el método loadView, es difícil reducir lo que podría ser el problema.

+6

la documentación para los estados de loadView: su implementación personalizada de este método no debería llamarse super. –

+0

Estaba buscando en Google y su respuesta solucionó mi problema :) Gracias. – tarnfeld

+0

¡Gracias! No pude entender lo que estaba pasando hasta que pisé la depuración y me di cuenta de que este método llamaba infinitamente. –

6

no estoy seguro de si esto es lo que se está viendo, pero un controlador de navegación dará a conocer puntos de vista que no están visibles para recuperar la memoria si una advertencia de memoria baja es recibida por la aplicación. Cuando la vista vuelve a ser visible, se recrea la vista, que llama a loadView.

0

Establecer la ventana de propiedades del controlador de vista a una vista válida.

1

que resolver el mismo problema eliminando el método -(void)loadView. Si crea UIViewController sin archivo nib, este método se agregará automáticamente al código.

Cuestiones relacionadas