Я рассчитывал добавить поддержку iCal в мое новое приложение, и все выглядело просто замечательно и без проблем работало на моей машине для разработки Mac OS X 10.6 Snow Leopard.
Теперь выглядит, в зависимости от того, что в вашем календаре, очень простой запрос ниже:
- (NSArray*) fetchCalendarEventsForNext50Minutes {
NSLog(@"fetchCalendarEventsForNext50Minutes");
NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
NSDate* startDate = [[NSDate alloc] init];
NSDate* endDate = [startDate addTimeInterval: 50.0 * 60.0];
NSPredicate *eventsForTheNext50Minutes = [CalCalendarStore eventPredicateWithStartDate:startDate endDate:endDate
calendars:[[CalCalendarStore defaultCalendarStore] calendars]];
// Fetch all events for this year
NSArray *events = [[CalCalendarStore defaultCalendarStore] eventsWithPredicate: eventsForTheNext50Minutes];
NSLog( @"fetch took: %f seconds", [NSDate timeIntervalSinceReferenceDate] - start );
return events;
}
производит трэш в пляжном мяче даже с довольно ограниченными событиями в магазине календаря.
Я что-то упустил здесь? Фрагмент кода в значительной степени точно из документации по адресу:
// Create a predicate to fetch all events for this year
NSInteger year = [[NSCalendarDate date] yearOfCommonEra];
NSDate *startDate = [[NSCalendarDate dateWithYear:year month:1 day:1 hour:0 minute:0 second:0 timeZone:nil] retain];
NSDate *endDate = [[NSCalendarDate dateWithYear:year month:12 day:31 hour:23 minute:59 second:59 timeZone:nil] retain];
NSPredicate *eventsForThisYear = [CalCalendarStore eventPredicateWithStartDate:startDate endDate:endDate
calendars:[[CalCalendarStore defaultCalendarStore] calendars]];
// Fetch all events for this year
NSArray *events = [[CalCalendarStore defaultCalendarStore] eventsWithPredicate:eventsForThisYear];
Похоже, что это как-то связано с правилами повторения, но, насколько я вижу, в любом случае нет других способов извлечения событий из хранилища календаря.
Кто-нибудь еще сталкивался с этим?
С уважением,
Frank