2010-02-13 9 views
11

Próbuję zmusić użytkownika do wyboru daty w przyszłości za pomocą selektora daty. Oczywiście użyłem metody compare: jednak, gdy wykonuję poniższy kod, nawet jeśli jest to ta sama data co [data NSDate], mówi on, że wykonuje instrukcję if. Tu jest mój kodu:Porównywanie NSDate do [data NSDate]

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

Czy próbowałeś użyć 'laterDate:' (lub 'earlyDate:') aby dokonać porównania? – gerry3

+0

Co się stanie, jeśli NSLog data, aby sprawdzić, czy ma prawidłową wartość. –

Odpowiedz

15

Nie znam odpowiedzi na twój problem, ale w jaki sposób można go obejść.

Wystarczy użyć minimumDate własność UIDatePicker, to nawet znacznie czystsze podejście.

+0

To działało bardzo dobrze, nie widziałem tego w API dla UIDatePicker, dzięki. – skylerl

24

Można użyć

[datePicker.date timeIntervalSinceNow] 

która zwraca NSTimeInterval (właśnie typedef dla podwójnej w jednostkach sekund), co ma pozytywny wpływ na przyszłość i negatywne dla przeszłości .

Zgodnie z treścią dokumentu, porównanie zapewnia porównywanie podsegmentów, dzięki czemu można użyć tego, aby wymusić ich datę na cały dzień później (zamiast tylko w przyszłości).

1

Obiekt NSDate zawiera zarówno datę, jak i godzinę, więc istnieje wiele dat z tego samego dnia, które mogą spaść przed lub po innej dacie z tego samego dnia.

Metoda klasy date zwraca obiekt daty z bieżącą datą ORAZ godziną.