我在存储来自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"];
});
}
}
}];