简体   繁体   English

权限添加日历事件iOS

[英]Permissions Add Calendar event iOS

How can I show an error when there is no permission? 没有权限时如何显示错误? (Eg "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];

granted will be either YES if access has been granted or NO otherwise. granted会要么YES如果授予访问权限或NO ,否则。
Also, you should make sure that you only call -requestAccessToEntityType:completion: when it's necessary to do so: 另外,应确保仅在必要时才调用-requestAccessToEntityType:completion: ::

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
    }
}

Here's the code I use. 这是我使用的代码。 Works like a charm: 奇迹般有效:

-(void)askPermissionForCalendarAccess {
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    /* iOS 6 requires the user grant your application access to the Event Stores */
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
    {
        /* iOS Settings > Privacy > Calendars > MY APP > ENABLE | DISABLE */
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            if (granted) {

                NSLog(@"granted");
                //This method checks to make sure the calendar I want exists, then move on from there...
                [self checkForCalendar];

            } else {

                //put error popup code here.
                NSLog(@"denied");
                [self performSelectorOnMainThread:@selector(showDeniedAccessAlert) withObject:nil waitUntilDone:NO];
            }
        }];
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM