1

我正在制作一个将事件添加到默认日历的应用程序,但我发现了一个问题。这是用于使应用程序访问日历的代码:

// create eventStore object.
EKEventStore *eventStore = [[EKEventStore alloc] init];

if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])

{
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
     {
         if(granted)
         {
             // create an instance of event with the help of event-store object.
             EKEvent *event = [EKEvent eventWithEventStore:eventStore];

             // set the title of the event.
             event.title = @"Event";


             event.startDate = [[NSDate date] dateByAddingTimeInterval:86400]; 

             event.endDate = [[NSDate date] dateByAddingTimeInterval:90000]; 

             // set the calendar of the event. - here default calendar
             [event setCalendar:[eventStore defaultCalendarForNewEvents]];

             // store the event using EventStore.
             NSError *err;
             [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

         }
         else {

            UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No permission to access!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [warningAlert show];
         }

     }];
}

我想如果我进入一般>隐私并将对日历的访问设置为“否”,每当我单击执行之前列出的操作的按钮时,程序应该跳过“其他”(将布尔设置为假)创建警报视图。但是当我尝试这个时,程序崩溃不让我做任何事情,如果我按下主页按钮然后重新进入应用程序,一个空的 alertView 会出现(没有标题或消息)。

我该如何解决这个问题?我把 alertView 放在了错误的地方?

添加信息:此功能位于我每次点击事件时单击的按钮上。

4

1 回答 1

1

您是否尝试过在主线程中显示警报..

if (granted)
{
  ....
}
else {
    dispatch_async(dispatch_get_main_queue(), ^{
       UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No permission to access!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
       [warningAlert show];
    });
}

向用户请求权限不会发生在主线程中。您可以通过进入主线程来完成您的 UI 工作(警报)。希望能帮助到你..

于 2014-07-11T05:58:24.200 回答