2010-02-13 14 views
11

Estoy tratando de obligar a un usuario a seleccionar una fecha en el futuro con un selector de fecha. Obviamente, utilicé el método compare: sin embargo, cuando hago el siguiente código, incluso si es la misma fecha que [NSDate date], le dice a la persona que ejecuta la instrucción if. Aquí está mi código:Comparando un NSDate con [NSDate date]

if ([datePicker.date compare:[NSDate date]] == NSOrderedAscending) // If the picked date is earlier than today 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hmm, this date is earlier than today" 
                message:@"The date you've selected is earlier than today's date, please pick another" 
                delegate:nil 
              cancelButtonTitle:@"Okay, I'll pick another" 
              otherButtonTitles:nil]; 
    // Show the alert 
    [alert show]; 

    // Release the alert 
    [alert release]; 
} 
+3

¿Ha intentado utilizar 'laterDate:' (o 'previousDate:') para hacer la comparación? – gerry3

+0

Qué sucede si NSLogia la fecha solo para ver si tiene el valor correcto. –

Respuesta

15

No sé la respuesta a su problema, pero cómo podría eludirlo.

sólo tiene que utilizar el minimumDate propiedad del UIDatePicker, que es incluso un enfoque mucho más limpio.

+0

Esto funcionó muy bien, no lo vi en la API de UIDatePicker, gracias. – skylerl

24

Puede utilizar

[datePicker.date timeIntervalSinceNow] 

que devuelve un NSTimeInterval (sólo un typedef para un doble, en unidades de segundos) que es positivo para el futuro y negativo para el pasado .

Como dice el documento, comparar proporciona una comparación por segundo, por lo que puede usar esto para forzar su fecha un día completo más tarde (en lugar de solo en el futuro).

1

Un objeto NSDate contiene una fecha Y una hora, por lo que hay MUCHAS fechas con el mismo día que pueden caer antes o después de otra fecha con el mismo día.

El método de clase date devuelve un objeto de fecha con el día y la hora actuales.