0

我正在尝试创建一个按钮,按下该按钮会创建一个日历事件,并将所述按钮的标题更改为“已创建事件”,或者可能会创建一个具有相同效果的 AlertView。到目前为止,这是我的代码:

- (IBAction)AddToCal:(id)sender {
EKEventStore *store = [[EKEventStore alloc] init];

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (!granted) {
       //Code to handle not-granted
    }
    else {
            //Code to create event          
            [event setCalendar:[store defaultCalendarForNewEvents]];
            NSError *err;
            [store saveEvent:event span:EKSpanThisEvent error:&err];
            [[NSUserDefaults standardUserDefaults] setBool:true forKey:[NSString stringWithFormat:@"%@Sub", PrevDest] ];
            [[NSUserDefaults standardUserDefaults] synchronize];
            [AddReminder  setTitle: [NSString stringWithFormat:@"Subscribed!"] forState: UIControlStateNormal];

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Event Added!"
                                                            message:@""
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
          }
    }];
    //Where I tested different placement of the code
}

现在这会创建一个很好的事件,但它不会创建一个 AlertView 或更改标题作为确认,甚至更多,它使我的应用程序冻结并且对触摸没有响应......直到,也就是说,我按下home 按钮,然后重新打开应用程序,此时标题更改,我的 AlertView 弹出。

我已经尝试将标题更改代码放在标记的位置,这使它可以工作,但这当然是在 if(!granted) 之外,因此无论如何都会导致按钮更改。甚至将代码放在那里也会导致同样的冻结现象。

我真的不知道这是怎么回事。这里有人遇到同样的问题吗?

4

1 回答 1

1

尝试:

dispatch_async(dispatch_get_main_queue(), ^{
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Event Added!"
                                                        message:@""
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
       [alert show];
});
于 2013-08-07T20:56:50.050 回答