¿Por qué se desasigna UIViewController aunque está en la pantalla?

No puedo entender lo que está pasando.

Estoy construyendo una aplicación de iPhone que utiliza una vista de desplazamiento con pagination. La vista de desplazamiento contiene varias vistas, cuyos controlleres de vista se cargan desde el guión gráfico llamando a:

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

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

Cuando activé Zombie Objects, el depurador escribió esto al enviar una acción al controller:

*** – [StreamingViewController performSelector: withObject: withObject:]: post enviado a la instancia desasignada 0x914f0e0

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

Un poco 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]; 

Si está utilizando ARC, las cosas abandonan generalmente cuando ya no tiene un puntero válido para algo. Entonces, en su caso, su controller de vista se sale del scope y se libera. La vista aún se conserva, ya que está siendo retenido por self.scrollView . Agregar el controller de vista a una matriz podría solucionar eso, pero solo si la matriz se instanció correctamente. Las poperías no se crean automáticamente. El uso de la propiedad tampoco lo crea en instancias a less que anule el acceso. Debido a la naturaleza de Cocoa, no obtendrá ningún error o post al intentar agregar un object a una propiedad nula, ya que es un código completamente válido.

Compruebe cómo está creando pageControllers y asegúrese de que está instanciando correctamente antes de usarlo.

p.ej. self.pageControllers = [[NSMutableArray alloc] init];