2012-09-24 24 views
5

? No se puede saber qué está pasando.¿Por qué se desasigna el UIViewController aunque está en la pantalla

Estoy construyendo una aplicación de iPhone que utiliza una vista de desplazamiento con paginación. La vista de desplazamiento contiene varios puntos de vista, cuyos controladores de vista se cargan desde el guión gráfico llamando:

[self.storyboard instantiateViewControllerWithIdentifier:@"identifier"]; 

agrego los controladores de vista a una matriz mutable y añadir sus puntos de vista a la vista de desplazamiento como subvistas. Después de aparecer en la pantalla, los controladores de vista se desasignan, por lo que las acciones de destino ya no funcionan.

Cuando Habilité zombi objetos, el depurador escribió esto en el envío de una acción al controlador:

*** - [StreamingViewController performSelector: withObject: withObject:]: mensaje enviado a la instancia 0x914f0e0 desasignado

Realmente traté de arreglar esto pero sin éxito, por lo que toda ayuda es muy apreciada.

algo más de código:

StreamingViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Streaming View Controller"]; 

[self.pageControllers addObject:controller]; // adding view controller to mutable array 

controller.view.frame = self.scrollView.frame; 
[self.scrollView addSubview:controller.view]; 
+0

¿Cómo se declara pageControllers? – mark

+0

pageControllers se declara como una propiedad @ privada – boeqqsh

Respuesta

3

Si está utilizando cosas ARC abandonan generalmente cuando ya no tiene un puntero válido a algo. Entonces, en su caso, su controlador de vista queda fuera del alcance y se libera. La vista todavía se conserva como está siendo retenida por self.scrollView. Agregar el controlador de vista a una matriz arreglaría eso, pero solo si la matriz se ha creado correctamente. Las propiedades no se crean automáticamente. El uso de la propiedad tampoco lo instancia para usted a menos que anule el acceso. Debido a la naturaleza de Cocoa, no obtendrá ningún error o mensaje al intentar agregar un objeto a una propiedad nula ya que es un código completamente válido.

Comprobar cómo se están creando pageControllers y asegúrese de que está correctamente instanciándola antes de usarlo.

por ejemplo. self.pageControllers = [[NSMutableArray alloc] init];

+0

. Era solo esta línea de código. Muchas gracias! :) – boeqqsh

+0

3 años después y sigue siendo útil. ¡Gracias! – PaperThick

Cuestiones relacionadas