【问题标题】:Permissions Add Calendar event iOS权限 添加日历事件 iOS
【发布时间】:2013-02-04 21:52:40
【问题描述】:

没有权限时如何显示错误? (例如,“你不给我们在你的日历上写字的权限。”)。

这是我的代码:

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];

【问题讨论】:

    标签: ios privacy eventkit


    【解决方案1】:

    如果已授予访问权限,granted 将是 YES,否则为 NO
    此外,您应确保仅在必要时致电-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
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是我使用的代码。像魅力一样工作:

      -(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];
                  }
              }];
          }
      }
      

      【讨论】:

      • 立即尝试。我为你调整了我的代码。我使用事件存储作为我的视图控制器的属性..
      • 当访问被拒绝时,应用程序崩溃。
      • 因为你的视图控制器没有实现-showDeniedAccessAlert方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多