0

我在我的应用程序中实现了 EKEventStore、EKCalendar 以在应用程序中创建 EKEvent。直到或除非我没有更改设置中的权限,它才能正常工作。但是,当我从设置中更改请求的访问权限(开/关或关/开)时,应用程序崩溃了。我找不到错误。如果有人有想法,请帮助我。这是我实现的代码:

 self.eventStore = [[EKEventStore alloc] init];
 [self checkEventStoreAccessForCalendar];

 -(void)checkEventStoreAccessForCalendar
{
EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
switch (status)
{
   case EKAuthorizationStatusAuthorized: [self accessGrantedForCalendar];
        break;
    case EKAuthorizationStatusNotDetermined: [self requestCalendarAccess];
        break;
    case EKAuthorizationStatusDenied:
    case EKAuthorizationStatusRestricted:
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Privacy Warning" message:@"Permission was not granted for Calendar"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }
        break;
        default:
        break;
} }

  -(void)requestCalendarAccess
 {
   [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,  
NSError *error)
 {
     if (granted)
     {
         dispatch_async(dispatch_get_main_queue(), ^{
        });
     }
 }];
}

 -(void)accessGrantedForCalendar
{
self.defaultCalendar = self.eventStore.defaultCalendarForNewEvents;
EKEvent *addEvent = [EKEvent eventWithEventStore:self.eventStore];
addEvent.title = [NSString stringWithFormat:@"%@", textcontainer.text];
}

#pragma mark EKEventEditViewDelegate

-(void)eventEditViewController:(EKEventEditViewController *)controller
      didCompleteWithAction:(EKEventEditViewAction)action{
[self dismissViewControllerAnimated:YES completion:^
 {
     if (action != EKEventEditViewActionCanceled)
     {
         dispatch_async(dispatch_get_main_queue(), ^{
          });
     }
 }];
 }

- (EKCalendar *)eventEditViewControllerDefaultCalendarForNewEvents:(EKEventEditViewController *)controller
{
return self.defaultCalendar;
 }
4

1 回答 1

0

当您的应用程序进入后台时,它应该保存其所有状态并准备好被杀死。当有人关闭对日历的访问时,系统处理该问题的最简单方法是杀死您的应用程序,这就是它发生的原因。如果您通过单击顶部的“返回您的应用程序”切换回您的应用程序,您会注意到您的应用程序将从头启动,而不是从您离开的地方启动。尝试不使用断点,您会注意到变化。

  • 所以它实际上不是崩溃。
于 2016-05-03T06:07:06.703 回答