7

我对目标 C 中的块很陌生。我已经阅读了文档,并且对它们有一个非常基本的了解。

为什么这行不通?这是请求日历访问的框架回调。它需要一个块作为参数。我想做的就是在块中分配并显示 UIAlertView,但是当它尝试显示时它会崩溃。

我希望这不是一个愚蠢的问题……网上所有使用块的介绍示例都只是展示了带有计数器的琐碎示例。

//Request access
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            if (granted == FALSE) {
                UIAlertView *myAlert = [[[UIAlertView alloc]initWithTitle:@"Calendar Access Denied"
                                                                          message:@"<InfoText>"
                                                                         delegate:nil
                                                                cancelButtonTitle:@"OK"
                                                                otherButtonTitles:nil] autorelease];
                [myAlert show];
            }
            else {
                [self addToCalendar];
            }
        }];
4

1 回答 1

24

你有没有尝试过?

if (granted == FALSE)
{
    dispatch_async(dispatch_get_main_queue(), ^{
       UIAlertView *myAlert = [[[UIAlertView alloc]initWithTitle:@"Calendar Access Denied"
                                                         message:@ <InfoText>"
                                                        delegate:nil
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil] autorelease];
       [myAlert show];
    });
}

这会在主线程中进行回调,对于混合块和 UIKit 很有用

于 2012-10-03T00:41:18.463 回答