2010-02-13 7 views
11

Sto tentando di forzare un utente a selezionare una data futura con un selettore di date. Ovviamente ho usato il metodo comparativo: tuttavia, quando faccio il seguente codice, anche se è la stessa data di [data NSDate], dice che esegue l'istruzione if. Qui è il mio codice:Confronto di un NSDate a [Data NSData]

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

Hai provato a usare 'laterDate:' (o 'beforeDate:') per fare il confronto? – gerry3

+0

Cosa succede se NSLog la data solo per vedere se ha il valore corretto. –

risposta

15

Non conosco la risposta al tuo problema, ma come potresti evitarlo.

Basta usare il minimumDate proprietà della UIDatePicker, che è ancora un approccio molto più pulito.

+0

Questo ha funzionato molto bene, non l'ho visto nell'API per UIDatePicker, grazie. – skylerl

24

È possibile utilizzare

[datePicker.date timeIntervalSinceNow] 

che restituisce un NSTimeInterval (solo un typedef per una doppia, in unità di secondi) che è positivo per il futuro e negativo per il passato .

Come dice il documento, compare fornisce un confronto di secondi, quindi è possibile utilizzarlo per forzare la data in un giorno successivo (anziché solo in un momento futuro).

1

Un oggetto NSDate contiene sia una data AND che un'ora, quindi ci sono MOLTE date con lo stesso giorno che possono cadere prima o dopo un'altra data con lo stesso giorno.

Il metodo di classe date restituisce un oggetto data con il giorno e l'ora della data corrente.