2012-10-03 11 views
7

Soy bastante nuevo en los bloques del objetivo C. He leído los documentos y tengo una comprensión bastante básica de ellos.Asignar/mostrar un UIAlertView en una instrucción de bloque

¿Por qué no funciona? Esta es una devolución de llamada de marco para solicitar acceso al Calendario. Toma un bloque como argumento. Todo lo que quiero hacer es asignar y mostrar UIAlertView en el bloque, pero se bloqueará cuando intente mostrarse.

Espero que esta no sea una pregunta tonta ... todos los ejemplos introductorios en la red que usan bloques solo muestran ejemplos triviales con contadores.

//Request access 
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 

      if (granted == FALSE) { 
       UIAlertView *myAlert = [[[UIAlertView alloc]initWithTitle:@"Calendar Access Denied" 
                      message:@"<InfoText>" 
                     delegate:nil 
                   cancelButtonTitle:@"OK" 
                   otherButtonTitles:nil] autorelease]; 
       [myAlert show]; 
      } 
      else { 
       [self addToCalendar]; 
      } 
     }]; 

Respuesta

24

¿Has probado?

if (granted == FALSE) 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIAlertView *myAlert = [[[UIAlertView alloc]initWithTitle:@"Calendar Access Denied" 
                 message:@ <InfoText>" 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil] autorelease]; 
     [myAlert show]; 
    }); 
} 

esto hace que las llamadas de vuelta en el hilo principal, útiles para bloques de mezcla y UIKit

Cuestiones relacionadas