2010-02-13 26 views
11

Bir kullanıcıyı ileride tarih seçiciyle bir tarih seçmeye zorlamaya çalışıyorum. Karşılaştırma yöntemini kullandım, ancak, aşağıdaki kodu yaptığımda, [NSDate date] ile aynı tarih olsa bile, if deyimini çalıştırır.Bir NSDate öğesinin [NSDate date] ile karşılaştırılması

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

Karşılaştırmayı yapmak için 'laterDate:' (veya 'EarlyDate:') kullanmayı denediniz mi? – gerry3

+0

Doğru değere sahip olup olmadığını görmek için tarihe NSLog yaparsanız ne olur? –

cevap

15

Sorunun cevabını bilmiyorum, ama nasıl atlatabildiğini.

Sadece UIDatePicker ait minimumDate özelliğini kullanın o bile daha temiz bir yaklaşım.

+0

Bu çok iyi çalıştı, UIDatePicker API'sinde bunu görmedim. – skylerl

24

Geçmişte için geleceğe yönelik olumlu ve olumsuz bir NSTimeInterval (saniye cinsinden bir çift için sadece bir typedef,) döndürür

[datePicker.date timeIntervalSinceNow] 

kullanabilirsiniz: İşte benim kodudur .

Doktorun dediği gibi, karşılaştırmak, karşılaştırmalı karşılaştırma sağlar; böylece, tarihlerini tam bir gün sonra (ileride yalnızca bir zaman yerine) zorlamak için kullanabilirsiniz.

1

Bir NSDate nesnesi hem bir tarih hem de saat içeriyor, bu nedenle aynı günle aynı güne sahip başka bir tarihten önce veya sonra çıkabilen MANY tarihleri ​​vardır.

date sınıf yöntemi, geçerli tarih ve saat ile bir tarih nesnesini döndürür.

İlgili konular