Pregunta

Tengo un UIAlert que aparece 3 veces cada vez que se llama. Aparece y desaparece antes de que pueda hacer clic en él. Podría ser que la viewDidLoad sí está siendo llamado 3 veces?

He implementado un UIAlert en el viewDidLoad de mi aplicación:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:alertMessage  delegate:self cancelButtonTitle:ok otherButtonTitles:nil];

Este es el viewDidLoad en el RootViewController, que gestiona los puntos de vista:

- (void)viewDidLoad {
    Kundenkarte *kartenAnsicht = [[Kundenkarte alloc]
                                                initWithNibName:@"Kundenkarte" bundle:nil];
    kartenAnsicht.rootViewController = self;
    kartenAnsicht.viewDidLoad;
    self.map = kartenAnsicht;


    [self.view addSubview:kartenAnsicht.view];


    [kartenAnsicht release];
//  [super viewDidLoad];

}

El viewDidLoad que evoca la UIAlert está en el controlador de vista kartenAnsicht.

Espero que alguien me puede ayudar porque estoy sin ideas.

¿Fue útil?

Solución

En primer lugar, nunca se debe poner cualquier tipo de pantalla en viewDidLoad. Este método está diseñado para detrás de la configuración de escenas después de la vista se leyó por primera vez a partir de cacao. No hay certeza de que se va a llamar cada vez que la vista muestra porque después de la primera vez que se carga, la vista puede que mantienen en la memoria y no se vuelven a cargar a partir de cacao.

En su lugar, poner la llamada para evocar la NSAlert en viewWillDisplay o viewDidDisplay. Esto mostrará la alerta cada vez que la vista aparece.

No creo que viewDidLoad se llama tres veces, pero para comprobar que sólo hay que poner un NSLog en el método para ver cuántas veces se le llama.

Cuando usted dice que:

  

He implementado un NSAlert en el   viewDidLoad () de mi aplicación:

... ¿qué significa eso? ¿Qué objeto tiene exactamente el método? Si es el delegado aplicación, esto no funcionará porque el protocolo de aplicación delegado no responde a viewDidLoad. Tiene que ser en un UIViewController.

Edit01:

Vea este post que tenía el mismo problema: UIAlertView aparece tres veces por llamada en lugar de sólo una

Respuesta corta: Matas a la alerta por la liberación de la misma. O bien retenerlo como una propiedad del controlador de vista o, mejor aún, mostrar la alerta con runModal en lugar de show y capturar el número de botón respondido de inmediato.

Otros consejos

No es necesario llamar -viewDidLoad mismo, se ejecuta automáticamente por el mecanismo de la SEMILLA de carga. Eso significa que usted obtiene invocaciones extra de -viewDidLoad: Uno. Por su diseño, y extras cada vez que se llame

Sería de gran ayuda para ver el código torno a la llamada de alerta.

Estoy utilizando una alerta cada vez que cambia de accesibilidad. Desde la accesibilidad se comprueba en repetidas ocasiones, la alerta podría conseguir pedido en repetidas ocasiones. Para aliviar esto, envuelvo el código de alerta de este modo:

if (!myAlert) { /* set up and show myAlert */ }

Sin embargo, un problema con esto es que cuando se hace clic en el botón Cancelar, la alerta se mantendrá no nulo, y por lo tanto nunca puede mostrar de nuevo debido a que condicional. Si alguien podría añadir a esta respuesta con una solución para eso, que sería grande. Asumo que puedo agregar un controlador para el botón de cancelación que destruirá MyAlert.

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