2012-02-05 1300 views
6

Tengo una visión única en mi guión, que agrego a mi punto de vista actual de la siguiente manera:un bloqueo al crear instancias de ViewController de Storyboard

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
      [self.view addSubview:mvc.view]; 

storyboard

La vista aparece, pero todo lo que después de que aparece, provoca un bloqueo. Qué estoy haciendo mal ?

Aquí se muestra un ejemplo cuando se rompe:

-(IBAction)showUsername:(id)sender{ 

    [testLabel setText:@"username"]; 

} 

Todo está conectado en el guión gráfico, así que las conexiones falsamente vinculados no deben causar el problema.

+0

usted debe mostrar su registro de bloqueo – Seamus

+0

aquí ... no hay nada más que un azul "(BGF)" ... –

Respuesta

8

se instancia un nuevo controlador de vista:

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 

Pero no conserve la misma. Su jerarquía de vistas es, tan pronto como la haya agregado a otra vista.

[self.view addSubview:mvc.view]; 

Así que cuando se hace clic en un botón, un mensaje que se envía a IBAction, pero el controlador de vista ha sido ya liberado. Para evitar que esto suceda, conserve su variable mvc, por ejemplo, en algún lugar de una propiedad.

@property(nonatomic, strong) MainViewController *controller; 

self.controller = mvc; 
+0

sí, gracias, hice esta pregunta nuevamente, y obtuve la misma respuesta ... El problema ya ha sido resuelto, pero gracias de todos modos. Estoy seguro de que esto ayudará a otros también. –

+0

Love you <3 la consola de depuración ni siquiera da una pista para descubrirlo. –

0

enter image description here

que puedo pensar de toda razón antes de mostrar registro ...

+0

Creo que se libera o no, no se crea una instancia correctamente ... Pero no sé cómo resolverlo Lo asigné a mi clase de controlador, debería funcionar bien. –

+0

@ user1066899 puede presionar ctrl y arrastrar su viewcontroller de ib a su archivo .h. entonces todo está bien. – Seamus

+0

no, desafortunadamente no puedo ... ¿Qué haría eso? –

0

Encienda NSZombie en el Producto >> Editar esquema que debería obtener más de error descriptivo que muestra a continuación. Entonces puedes agregarlo.

+0

Sí, gracias, funciona bien. Ahora finalmente obtengo el error, y como suponía, mi ViewController se desasigna '- [MainViewController performSelector: withObject: withObject:]: mensaje enviado a la instancia desasignada 0x3fa5a60' –

+0

Pero no sé cómo resolverlo ... ¿puedes ayuadame ? –

0

Asegúrese de que su método se declara e implementa correctamente. También asegúrese de tener IBOutlet UILabel * testLabel en su .h. El único otro problema que puedo pensar aparte de eso es cómo lo conectaste. ¿Se cuelga solo cuando presiona el botón?

0

Esta línea es incorrecta, esta será la razón por la que está recibiendo el error.

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
     [self.view addSubview:mvc.view]; 

reemplazarlo con este

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
[self presentModalViewController:mvc animated:YES]; 

En storyboards no va a agregar una vista secundaria que está haciendo uno de los tres lo que represente un modal, empujándolo a la pila de control de navegación o haciendo una costumbre de estos.

+0

La adición de la subvista está reservada para cuando se haya presentado el control de vista. – Popeye

Cuestiones relacionadas