0

アプリ内で EKEvent を作成するために、アプリに EKEventStore、EKCalendar を実装しました。設定からアクセス許可を変更しない限り、または変更しない限り、正常に動作しています。しかし、設定から要求されたアクセス (オン/オフまたはオフ/オン) を変更すると、アプリがクラッシュします。エラーが見つかりません。誰かがアイデアを持っているなら、私を助けてください。これが私が実装したコードです:

 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

アプリがバックグラウンドになると、すべての状態を保存し、強制終了する準備をする必要があります。誰かがカレンダーへのアクセスをオフにした場合、システムがこれに対処する最も簡単な方法はアプリを強制終了することです。上部の [Back to Your-App] をクリックしてアプリに戻ると、アプリが終了した場所からではなく、最初から起動していることがわかります。ブレークポイントを使用しないようにすると、変更に気付くでしょう。

  • したがって、実際にはクラッシュではありません。
于 2016-05-03T06:07:06.703 に答える