iOS: ¿cómo comparar dos veces?

Utilizo la siguiente function para comprobar si un post ha caducado:

- (BOOL) hasExpinetworking:(NSDate*)myDate { if(myDate == nil) { return false; } NSDate *now = [NSDate date]; return !([now compare:myDate] == NSOrdenetworkingAscending); } 

Esto funciona bien si comparo dos dates diferentes. Sin embargo, devuelve falso si el post ha caducado anteriormente en el día de hoy. ¿Alguna idea sobre cómo podría solucionarlo?

(Agregando mi comentario como respuesta 🙂

Esto no debería suceder, también NSDate diferencia de 1 segundo entre NSDate instancias de NSDate . Agregue un NSLog() con ambas dates allí para ver si son diferentes.

Puede usar el método de sistema de la class NSDate para comparar con la hora actual

 - (NSTimeInterval)timeIntervalSinceNow 

El valor de retorno es el intervalo entre el receptor y la date y hora actuales. Si el receptor es anterior a la date y hora actual, el valor de retorno es negativo.

Entonces el código correcto será

 - (BOOL) hasExpinetworking:(NSDate*)myDate { return [myDate timeIntervalSinceNow] < 0.f; } 

O si desea comparar 2 dates, use

 - (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 
 +(BOOL)isEndDateBigger :(NSDate *)currDate :(NSDate *)endDate { if ([currDate compare:endDate] == NSOrdenetworkingDescending) { NSLog(@"date1 is later than date2"); return YES; } else if ([currDate compare:endDate] == NSOrdenetworkingAscending) { return NO; } else { return NO; } } 

Verifique si devuelve NSOrdenetworkingSame cuando es el mismo día. Tal vez necesites comparar el time también, por separado.