2013-11-05 19 views
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标记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; 
} 
+0

设置一个断点,并说你在哪一行有崩溃 – LombaX

+0

@LombaX我已经设置了断点到所有的方法..但它没有去任何方法之前崩溃。 –

+0

我可能对此有误,但是一旦设置被更改,您的应用程序不会重新启动?我已经注意到这与几个应用程序。你的应用程序可能不会真的崩溃,而是一个“强制关闭”,我可能在这方面也是错误的。 – sbarow

回答

0

当你的应用转到后台就应该保存它的所有国家和应做好被杀。当某人关闭对日历的访问时,系统处理这个问题的最简单方法就是杀死你的应用,这就是它发生的原因。如果您点击顶部的“回到您的应用程序”切换回您的应用程序,您可以注意到您的应用程序将从一开始启动,而不是从您离开的位置启动。尽量不要使用断点,你会注意到变化。

  • 所以它不是真的崩溃。