Hi, I've been looking at adding iCal support to my new application and everything seemed just fine and worked on my Mac OS X 10.6 Snow Leopard development machine without a hitch.
Now it looks like depending on what is in your calendar the very simple query below:
- (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;
}
produces a beachball thrash even with quite limited events in the calendar store.
Am I missing something crucial here? The code snippet is pretty much exactly from the documentation at:
// 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];
It looks like it has something to do with the recurrence rules, but as far as I can see there are no other ways of fetching events from the calendar store anyway.
Has anybody else come across this?
Best regards,
Frank