简单示例我使用下面代码段中的代码:
搜索框:2016年4月15日15:00 pm-18:00
在日历中输入的事件:
现在used方法只返回一个对象 - 即事件2.显然我希望同时返回 - 事件1和2。
我真的不明白为什么会这样!我的代码中有什么错过的?提前谢谢。
int seconds_in_year = 60*60*24*365;
__block
NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:startTime];
__block
NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:currentStart];
// use Dictionary for remove duplicates produced by events covered more one year segment
NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024];
EKEventStore *store = [[EKEventStore alloc] init];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
// enumerate events by one year segment because iOS do not support predicate longer than 4 year !
while ([currentStart compare:endTime] == NSOrderedAscending) {
if ([currentFinish compare:endTime] == NSOrderedDescending) {
currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:endTime];
}
NSPredicate *predicate = [store predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:nil];
[store enumerateEventsMatchingPredicate:predicate
usingBlock:^(EKEvent *event, BOOL *stop) {
if (event) {
[eventsDict setObject:event forKey:event.eventIdentifier];
}
}];
currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart];
}
return;
}];
如果我尝试另一个事件3(2016年4月15日14:00 pm-19:00pm),那么该方法将整个搜索周期返回到日历中的“事件”。与之前的情况相比,这是正确的,这仍然让我感到头疼。
答案 0 :(得分:0)
由于方法名称暗示 predicateForEventsWith StartDate 搜索等于或晚于传递日期参数的startDate
。