eventsMatchingPredicate在多天的事件中找不到最后一个日期

时间:2012-11-07 07:15:52

标签: ios nspredicate eventkit

我有一个事件(称为“测试事件”),从11月6日凌晨2点开始,到11月24日上午10点结束。当我试图通过指定一天的范围来找到事件时,我可以找到它所有日子(11月6日,11月7日,11月23日)除了11月24日

每次用户选择新的一天时都会调用以下方法:

- (void)loadItemsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
{
    NSLog(@"loadItemsFromDate");

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSLog(@"%@ to %@", [dateFormatter stringFromDate:fromDate], [dateFormatter stringFromDate:toDate]);

    // Create the predicate from the event store's instance method
    NSPredicate *predicate = [self.store predicateForEventsWithStartDate:fromDate
                                                             endDate:toDate
                                                           calendars:nil];

    NSLog(@"predicateFormat: %@", [predicate predicateFormat]);

    // Fetch all events that match the predicate
    self.currentDayEvents = [self.store eventsMatchingPredicate:predicate];

    NSLog(@"single day events:");
    for(EKEvent *event in self.currentDayEvents)
    {
        NSLog(@"title: %@, start: %@, end: %@", event.title, [dateFormatter stringFromDate:event.startDate], [dateFormatter stringFromDate:event.endDate]);
    }
    NSLog(@"\n");
}

以下是用户选择11月6日时的日志(可以找到“测试事件”):

loadItemsFromDate
11/6/12, 12:00 AM to 11/6/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/6/12, 12:00 AM; end:11/6/12, 11:59 PM; cals:(null)
single day events:
title: Vote, start: 11/6/12, 12:00 AM, end: 11/6/12, 11:59 PM
title: Test Event, start: 11/6/12, 2:00 AM, end: 11/24/12, 10:00 AM

11月7日到22日所有看起来都与此日志相似,即11月23日(可以找到“测试事件”):

loadItemsFromDate
11/23/12, 12:00 AM to 11/23/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/23/12, 12:00 AM; end:11/23/12, 11:59 PM; cals:(null)
single day events:
title: Test Event, start: 11/6/12, 2:00 AM, end: 11/24/12, 10:00 AM

这是11月24日的日志(由于它没有返回“测试事件”,因此没有按预期工作):

loadItemsFromDate
11/24/12, 12:00 AM to 11/24/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/24/12, 12:00 AM; end:11/24/12, 11:59 PM; cals:(null)
single day events:

为什么即使事件在当天上午1​​0点结束,也没有找到11月24日的活动?我正在运行iOS 6.0.1。

1 个答案:

答案 0 :(得分:2)

我相信iOS代码中存在一个错误。我重现的步骤:

  1. 完全按照上面的基本描述创建测试事件 iOS日历应用。
  2. 在月视图中查看它,您会注意到 在11/24/2012没有点/标记......对我来说这表明有些可疑。然后单击第24个磁贴并注意事件IS实际列出。
  3. 然后将您的活动更改为 全天活动(从你的开始时间开始有效地删除凌晨2点 从你的结束时间上午10点开始)。
  4. 在月视图中查看它,您会注意到现在有一​​个点/标记在11/24/2012。
  5. 我不确定如何解决此问题,但我可以验证我的应用中的代码是否与您的代码存在相同的问题。