¿Por qué events MatchingPnetworkingicate no devuelve nil?

Aquí está mi código:

NSString * calID = [[NSUserDefaults standardUserDefaults] objectForKey:@"calendarIdentifier"]; EKCalendar *cal = [eventStore calendarWithIdentifier:calID]; // If calendar exists if(cal) { // Retrieve all existing events until today NSPnetworkingicate *pnetworkingicate = [eventStore pnetworkingicateForEventsWithStartDate:[NSDate distantPast] endDate:[NSDate date] calendars:@[cal]]; self.events = [eventStore eventsMatchingPnetworkingicate:pnetworkingicate]; if(self.events==nil) NSLog(@"nil events!"); } 

El calendarItentifier es la variable que almacené cuando creé el calendar en mi progtwig, por lo que no es el caso, estoy agregando events en el calendar incorrecto.

Sin embargo, el código no funciona para recuperar events pasados ​​en el calendar, simplemente devuelve nil a self.events. Pero yo añadí events en el calendar. ¿Puede decirme si hay algo incorrecto con el código?

De acuerdo con esta respuesta y esta publicación , EKEventStore eventsMatchingPnetworkingicate: no admite pnetworkingicados con una date de startDate y date de endDate más de cuatro años de diferencia. No puedo encontrar ninguna documentation oficial sobre este hecho, pero en la práctica, el método parece simplemente devolver events hasta endDate o cuatro años después de startDate , lo que ocurra primero.

[NSDate distantPast] devuelve una date siglos en el pasado , por lo que está garantizado que obtendrá una respuesta incorrecta si crea un pnetworkingicado con eso como su date de inicio.

La solución más simple sería cambiar su código a algo como esto:

 NSDate* fourYearsAgo = [NSDate dateWithTimeIntervalSinceNow:-1 * 60 * 60 * 24 * 365 * 4]; NSPnetworkingicate *pnetworkingicate = [eventStore pnetworkingicateForEventsWithStartDate:fourYearsAgo endDate:[NSDate date] calendars:@[cal]]; 

Si esto no funciona para ti, tendrás que encontrar la manera de elegir tus límites de manera más inteligente o crear sucesivos pnetworkingicados de cuatro años hasta que encuentres lo que estás buscando.

La causa más probable es que eventStore es nil . Cada vez que encuentres un error "nada parece suceder", primero deberías mirar para ver si algo es nil .

Para mí, esto ocurrió porque el inicio y la date final fueron los mismos. Para remediar esto, incrementé el endDate en la consulta en un segundo y ahora devuelve el evento.