我在存储来自EKEventStore查询的事件时遇到问题。例如,使用以下代码时,事件始终为零:

__block NSArray *events = [[NSArray alloc] init];

if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (granted)
                events = [eventStore eventsMatchingPredicate:predicate];
        });
    }];
}


我知道[eventStore eventsMatchingPredicate:predicate]正在返回事件,就像我将NSLog放在块中一样,然后我可以看到事件详细信息。保留结果似乎存在问题。如您所见,我尝试在主线程上执行此操作无济于事。

我正在使用ARC,这可能会有所作为。

谢谢

最佳答案

好的,我的意思是我在requestAccessToEntity块之后执行“返回事件”。这是不好的,因为requestAccessToEntity块是异步的,并且需要很短的时间来执行该操作,否则它将立即返回。因此,我创建了一个委托,并在requestAccessToEntity完成后调用此委托,以便它在完成时通知我,并在委托调用中将数组传回。

[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (granted) {
        if (delegate != nil && [delegate respondsToSelector:@selector(todaysEventsComplete:)]) {
            events = [eventStore eventsMatchingPredicate:predicate];
            dispatch_async(dispatch_get_main_queue(), ^{
                [delegate todaysEventsComplete:events];
            });
        } else {
            dispatch_async(dispatch_get_main_queue(), ^{
                [UIAlertView alertViewWithTitle:nil message:@"You have denied access to your calendar for this app"];
            });
        }
    }
}];

10-08 07:43