Iphone Can';在EKEventStore中不显示Alertview

Iphone Can';在EKEventStore中不显示Alertview,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在做一个涉及iOS事件工具包的项目。它需要向后兼容ios 5。所以我试着实现了一些在So上找到的方法。结果是,当我试图显示UIAlert时,它崩溃了 -(void)addToCalender { EKEventStore *eventStore = [[EKEventStore alloc] init]; if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]

我正在做一个涉及iOS事件工具包的项目。它需要向后兼容ios 5。所以我试着实现了一些在So上找到的方法。结果是,当我试图显示UIAlert时,它崩溃了

-(void)addToCalender {

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
    {
        __block typeof (self) weakSelf = self; // replace __block with __weak if you are using ARC
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
         {
             if (granted)
             {
                 //[weakSelf performSelectorOnMainThread:@selector(addEventToCalendar) withObject:nil waitUntilDone:YES];
                 [weakSelf performSelectorOnMainThread: @selector(presentEventEditViewControllerWithEventStore:) withObject:eventStore waitUntilDone:YES];
             }
             else
             {
                 NSLog(@"Not granted");
                 UIAlertView *alert = [[UIAlertView alloc]
                                       initWithTitle: @"Announcement"
                                       message: @"It turns out that you are playing Addicus!"
                                       delegate: nil
                                       cancelButtonTitle:@"OK"
                                       otherButtonTitles:nil];
                 [alert show];
                 [alert release];
             }
         }];
    }
    else
    {
        [self performSelectorOnMainThread: @selector(presentEventEditViewControllerWithEventStore:) withObject:eventStore waitUntilDone:NO];
    }
}
我的错误信息相当含糊,但我想这是关于不能被解雇的主要威胁

我不确定。但是,我还想在权限未设置时获得“此应用程序需要您的权限”对话框,这可能吗?

感谢


我的假设是正确的,它需要在主线程上调度

我也有同样的问题。我使用了以下代码。请在这里使用您的代码

dispatch_async(dispatch_get_main_queue(), ^{
    });
比如说,

dispatch_async(dispatch_get_main_queue(), ^{
            // alert code
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning!" message:@"Your internet connection is currently unavailable. Please try to connect later." delegate:self cancelButtonTitle:@"Done" otherButtonTitles:nil];
            [alert show];
            [alert release];
        });
dispatch_async(dispatch_get_main_queue(), ^{
            // alert code
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning!" message:@"Your internet connection is currently unavailable. Please try to connect later." delegate:self cancelButtonTitle:@"Done" otherButtonTitles:nil];
            [alert show];
            [alert release];
        });