Obtener todos los eventos de EventStore EventKit iOS

Me gustaría saber cómo recuperar todos los eventos de una EventStore usando EventKit en iOS.

De esta manera puedo especificar todos los eventos para hoy:

- (NSArray *)fetchEventsForToday { NSDate *startDate = [NSDate date]; // endDate is 1 day = 60*60*24 seconds = 86400 seconds from startDate NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:86400]; // Create the predicate. Pass it the default calendar. NSArray *calendarArray = [NSArray arrayWithObject:defaultCalendar]; NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarArray]; // Fetch all events that match the predicate. NSArray *events = [self.eventStore eventsMatchingPredicate:predicate]; return events; } 

Lo correcto debería usar NSPredicate, que se crea con:

 NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarArray]; 

He intentado usar

 distantPast distantFuture 

como startDate y endDate, no es bueno. Así que otras A de otras Q no son exactamente lo que estoy buscando.

¡Gracias!


EDITAR

Probé y llegué a la conclusión de que solo puedo buscar eventos en un período de 4 años como máximo. ¿Alguna forma de superar esto? Sin usar múltiples fetches ..

Código para obtener todos los eventos en la matriz:

 NSDate *start = ... NSDate *finish = ... // use Dictionary for remove duplicates produced by events covered more one year segment NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024]; NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:start]; int seconds_in_year = 60*60*24*365; // enumerate events by one year segment because iOS do not support predicate longer than 4 year ! while ([currentStart compare:finish] == NSOrderedAscending) { NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:currentStart]; if ([currentFinish compare:finish] == NSOrderedDescending) { currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:finish]; } NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:nil]; [eventStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop) { if (event) { [eventsDict setObject:event forKey:event.eventIdentifier]; } }]; currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart]; } NSArray *events = [eventsDict allValues]; 

Este es el método que estoy usando en mi aplicación para buscarlos.

  NSDate *startDate = [NSDate distantPast]; NSDate *endDate = [NSDate distantFuture]; 

Este es código en producción

 const double secondsInAYear = (60.0*60.0*24.0)*365.0; NSPredicate* predicate = [eventStore predicateForEventsWithStartDate:[NSDate dateWithTimeIntervalSinceNow:-secondsInAYear] endDate:[NSDate dateWithTimeIntervalSinceNow:secondsInAYear] calendars:nil]; 

Para ti, recomendaría mirar hacia atrás y hacia adelante diez años.