2011-06-11 16 views
6

¿Existe alguna forma particular de configurar un NSPredicate para comparar fechas?Uso de NSDate dentro de NSPredicate

Básicamente tengo un objeto de foto que tiene un NSDate, lastViewed.

Me gustaría configurar un NSPredicate que devolverá todos los objetos de fotos que se han visto más recientemente que un período de tiempo especificado, normalmente dos días.

estoy obteniendo la fecha pasada de este modo:

NSTimeInterval secondsPast = -172800;

NSDate * twoDaysPast = [NSDate dateWithTimeInterval:secondsPast sinceDate:[NSDate date]]; y configuración del NSPredicate así:

request.predicate = [NSPredicate predicateWithFormat:@"lastViewed > %@", twoDaysPast];

Sin embargo, yo estoy no hay resultados de vuelta y no estoy muy seguro por qué.

sé que todos mis objetos fotográficos han lastViewed conjunto - que está establecido en un valor predeterminado de ahora cada vez que se añade la foto en la base de datos, lo que por defecto que deberían mostrar todas las fotos creado como lastViewed será más reciente que mi twoDaysPast NSDate.

¿Puedo comparar directamente dos instancias de NSDate de esta manera?

Respuesta

2

Esa es la forma correcta de utilizar NSDates en NSPredicates. Si no funciona, ¿ha intentado eliminar el predicado por completo y asegurarse de que el resto de la solicitud funciona? También es posible que desee comprobar con cordura su predicado NSLog'ing antes de ejecutar la consulta.

+0

Sí, lo intenté con un predicado nulo y devuelve todos los objetos de la foto como se esperaba, por lo que parece que algo podría estar mal en otro lugar. Si NSLogro el predicado da lo siguiente: _2011-06-12 13: 45: 18.166 CL Places [5912: 207] lastViewed> CAST (329402718.166162, "NSDate") _ – Will

4

tuve éxito utilizando el método NSDate clase dateWithTimeIntervalSinceNow: (y que puede hacer que todo en una línea) de la siguiente manera:

request.predicate = [NSPredicate predicateWithFormat:@"recentPhotoLastViewed > %@", [NSDate dateWithTimeIntervalSinceNow:(-172800)]]; 

Asegúrese de que los objetos en lastViewed CoreData son en realidad NSDate objetos y no cadenas.

NSDate objetos se pueden comparar directamente utilizando el NSDate método compare:. Las fechas se basan en la cantidad de tiempo desde la fecha de referencia de un tipo definido, lo que permite que una fecha sea mayor o menor que otra fecha. Esto se describe here.

Cuestiones relacionadas