iOS:predicateForEventsWithStartDate不返回从搜索框

时间:2016-04-15 06:22:01

标签: ios xcode ekeventstore

简单示例我使用下面代码段中的代码:

搜索框:2016年4月15日15:00 pm-18:00

在日历中输入的事件

  • 活动1:2016年4月15日12:00 pm-16:00pm
  • 活动2:2016年4月15日下午17:00至20: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),那么该方法将整个搜索周期返回到日历中的“事件”。与之前的情况相比,这是正确的,这仍然让我感到头疼。

1 个答案:

答案 0 :(得分:0)

由于方法名称暗示 predicateForEventsWith StartDate 搜索等于或晚于传递日期参数的startDate