Pregunta

Estoy intentando mostrar una vista de alerta tan pronto como aparece la vista (sin usar un botón). En viewcontroller.m tengo:

- (void) viewWillAppear:(BOOL)animated
{
    UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
                              delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];

    [alert show];

    [alert release];
}

y en viewcontroller.h tengo:

IBOutlet UIView *alert; 

No he hecho nada a mi archivo .xib.

Cuando se ejecuta en el simulador obtengo lo siguiente en la consola:

2009-11-30 23: 41: 36.079 BatteryApp [867: 20b] *** Finalización de la aplicación debido a la excepción no detectada 'NSInternalInconsistencyException', razón: '- [UIViewController _loadViewFromNibNamed: paquete:] cargó el " BatteryAppViewController " plumín pero la vista de salida no estaba configurada. '

¿Alguna idea de dónde me he equivocado, algo relacionado con mi xib?

Editar // Conecto la alerta a una nueva vista en mi xib, todavía no tuve suerte

¿Fue útil?

Solución

El problema es que las dos animaciones principales (una para ver la vista actual y otra para mostrar la alerta) se superponen. Debe separar estos dos movimientos de animación siguiendo esta solución alternativa:

  1. Haga que el código de alerta esté en viewDidAppear , en lugar de viewWillAppear

  2. Llamar a [alert performSelector: @selector (show) withObject: nil afterDelay: 0.0] . Esto garantiza que la alerta se produzca después de finalizar la animación actual.

Puede que tenga que tener cuidado al liberar alert todavía. Si fuera usted, tendría un método diferente (por ejemplo, showHelloAlert) y luego lo llamaría desde viewDidAppear:

- (void)viewDidAppear: (BOOL)animated {
  [self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
  [super viewDidAppear:animated];
}

Otros consejos

Intente poner la alerta en viewDidAppear.

Además, ¿para qué sirve el iboutlet? Intenta sacarlo todo.

Abra su archivo xib en Interface Builder y controle el arrastre desde el propietario del archivo (que debe ser de la clase BatteryAppViewController ) a su vista (no a la alerta) y seleccione la vista en el menú emergente . El registro indica que no ha realizado esta conexión de salida.

No conecta UIAlerts en Interface Builder. Las alertas no tienen plumillas personalizables, por lo que no puede cargarlas en el generador de interfaces. Debes eliminar el:

IBOutlet UIView *alert;

... completamente.

El mensaje de error dice que no tiene una vista definida para su controlador de vista. Necesita configurar eso en Interface Builder.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top