2013-01-11 1 views
5
EKEventStore *eventStore = [[UpdateManager sharedUpdateManager] eventStore]; 

if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 
{ 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) 
    { 
     if (granted)... 

Desidero chiedere all'utente l'autorizzazione per aggiungere un evento al suo calendario. Dopo che è stato concesso, devo chiedere di nuovo il permesso quando, ad esempio, desidero rimuovere un evento (in un'altra sessione dopo che l'app è stata chiusa e riaperta) o è solo una cosa che richiede tempo?requestAccessToEntityType - una volta o tutte le volte?

Se si tratta di una cosa sola, posso inserirla in ViewDidLoad al primo pranzo solo per "sbarazzarmene"?

+1

Questo non ha assolutamente ** ** niente a che fare con Xcode. –

risposta

16

Hai solo bisogno di chiamare una volta:

BOOL needsToRequestAccessToEventStore = NO; // iOS 5 behavior 
EKAuthorizationStatus authorizationStatus = EKAuthorizationStatusAuthorized; // iOS 5 behavior 
if ([[EKEventStore class] respondsToSelector:@selector(authorizationStatusForEntityType:)]) { 
    authorizationStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]; 
    needsToRequestAccessToEventStore = (authorizationStatus == EKAuthorizationStatusNotDetermined); 
} 

if (needsToRequestAccessToEventStore) { 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {    
     if (granted) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       // You can use the event store now 
      }); 
     } 
    }]; 
} else if (authorizationStatus == EKAuthorizationStatusAuthorized) { 
    // You can use the event store now 
} else { 
    // Access denied 
} 

Non si dovrebbe farlo al primo lancio, però. Richiedi l'accesso solo quando ne hai bisogno e questo non è il caso fino a quando l'utente non decide di aggiungere un evento.

+0

Devo vedere il prompt sul simulatore iOS 6 dopo questo? Perché in questo momento non lo faccio e la mia privacy sotto il calendario è vuota – Segev

+0

@Sha È normale. Gli avvisi sulla privacy non vengono visualizzati nel simulatore iPhone. Test su un dispositivo reale. –

+0

Non ho un dispositivo ios 6 a portata di mano. Perché dovrebbero inserire nel simulatore una sezione sulla privacy che dice "Le applicazioni che hanno richiesto l'accesso ai tuoi calendari verranno visualizzate qui"? si sente sbagliato – Segev