2011-12-15 22 views
10

Así es como me muestro UIAlertView y el delegado clickedButtonAtIndex -ARC y UIAlertView: Selector no reconocido enviado a la instancia

UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle: @"title" 
           message: @"message" 
           delegate: self 
        cancelButtonTitle: @"Cancel" 
        otherButtonTitles: @"Continue", nil]; 

    [alert show]; 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    //something 
} 

Esta pieza de código funciona perfectamente sin ARC. Pero con ARC se lanza este error - Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '- [__ NSCFType alertView: clickedButtonAtIndex:]: Selector no reconocido enviado a la instancia 0x859d790'

¿Alguna idea de por qué el delegado es tirar ¿este error?

+1

El delegado se está desasignando. ¿Cómo estás creando y administrando ese objeto? –

+1

@FirozeLafeer: el objeto que llamaba a esta pieza de código, es decir, fue lanzado por ARC. Lo hice una propiedad y ahora parece funcionar. Gracias :) – arank

Respuesta

13

Su delegado ha sido desasignado. Vuelva a verificar su código para asegurarse de que el objeto que muestra la alerta y que se está configurando como delegado se retenga de alguna manera (es decir: algo en su aplicación tiene una fuerte referencia).

+0

este fue de hecho mi problema, que después de esta publicación me di cuenta fue porque había copiado un botón en el guión gráfico que todavía tenía un método adjunto que trataba el viewController. Por lo tanto, mi otro método, al que se llamaba WAS y se ejecutaba correctamente, no podía llevar a cabo las tareas dentro del clústerButtonAtIndex. Espero que esto ayude a alguien, ¡gracias por tu solución! –

+0

Además, busque CocoaPods para UIAlertView y encontrará una serie de adiciones basadas en bloques que simplificarán el uso de UIAlertView y eliminarán la necesidad de usar UIAlertViewDelegate en los controladores de visualización. –

0

similar también puede suceder si olvida la nula al final después del último parámetro otherButtonTitles:

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

Curiosamente se bloquea sólo la primera vez que se ejecuta la aplicación. Después de eso, funciona bien.

Cuestiones relacionadas