Search code examples
iosprivacyeventkit

Permissions Add Calendar event iOS


How can I show an error when there is no permission? (E.g. "You don't give us the persmission to write in your calendar.").

This is my code :

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {

EKEventStore *es = [[EKEventStore alloc] init];
[es requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    /* This code will run when uses has made his/her choice */
}];
}
        NSDateFormatter *   dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"ddMMyy"];

        NSString *fechainicio = datum;
        NSString *fechafin = datum;
        titel = [NSString stringWithFormat:@"%@ (%@)", titel, plaatslabel.text];

        NSDate * date = [[NSDate alloc] init];
        date = [dateFormatter dateFromString:fechainicio];
        NSDate * date2 = [[NSDate alloc] init];
        date2 = [dateFormatter dateFromString:fechafin];

        EKEventStore *eventStore = [[EKEventStore alloc] init];

        EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
        event.title     = @"Optreden Ronald Goedemondt";
        event.location = titel;
        event.allDay = YES;

        event.startDate = date;
        event.endDate   = date2;

        [event setCalendar:[eventStore defaultCalendarForNewEvents]];
        NSError *err;
        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

WBSuccessNoticeView *notice = [WBSuccessNoticeView successNoticeInView:self.view title:@"Show geplaatst in uw agenda."];
[notice show];

Solution

  • granted will be either YES if access has been granted or NO otherwise.
    Also, you should make sure that you only call -requestAccessToEntityType:completion: when it's necessary to do so:

    EKEventStore *es = [[EKEventStore alloc] init];
    EKAuthorizationStatus authorizationStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    BOOL needsToRequestAccessToEventStore = (authorizationStatus == EKAuthorizationStatusNotDetermined);
    
    if (needsToRequestAccessToEventStore) {
       [es requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
            if (granted) {
                // Access granted
            } else {
                // Denied
            }
        }];
    } else {
        BOOL granted = (authorizationStatus == EKAuthorizationStatusAuthorized);
        if (granted) {
            // Access granted
        } else {
            // Denied
        }
    }