我有一个事件(称为"测试事件"),该事件于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:
即使活动在当天上午10点结束,为什么还没有找到11月24日的活动?我正在运行iOS 6.0.1。
我相信iOS代码中有一个错误。我复制的步骤:
- 完全按照您在基本中描述的准确创建测试事件iOS日历应用。
- 在一个月的视图中查看它,您会注意到2012年11月24日没有点/标记...在我看来,这表明正在发生一些可恶的事情。然后单击第24个图块,并注意该事件实际列出了。
- 然后将您的活动更改为全天活动(从开始时间有效地删除凌晨2点,从您的结束时间上午10点)。
- 在一个月的视图中查看它,您会注意到现在有一个点/标记在2012年11月24日。
我不确定该如何解决这个问题,但是我可以验证我的应用程序中的代码与您的问题表现出相同的问题。