2013-04-18 101 views
2

我有一個IBAction爲方法綁到運行下面的代碼UIToolbarButton。的UIDatePicker和日期不存儲正確

的是的UIDatePicker僅設置顯示的時間給用戶。 因此,選取器隨機選擇日期:有時日期是今天,有時日期是明天。我希望選擇者總是選擇所選的時間(但總是在將來)。例如如果用戶在1月1日晚上10:00點選擇上午6點,我希望日期在1月2日上午6點存儲。

下,如果要做到這一點,但是時間的NSLog的50%返回一個答案,它返回其他50%的時間。

if (self.picker.date >= [NSDate dateWithTimeIntervalSinceNow:0]) { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSDate *pickerdate = self.picker.date; 
    [defaults setObject:pickerdate forKey:@"pickerdate"]; 
    [defaults synchronize]; 
    NSLog(@"The date is more than now. Pickerdate is %@",pickerdate); 
} 
else { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSCalendar*  calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents* components = [[NSDateComponents alloc] init]; 
    components.day = 1; 
    NSDate * pickerdate = [calendar dateByAddingComponents: components toDate: self.picker.date options: 0]; 
    [defaults setObject:pickerdate forKey:@"pickerdate"]; 
    [defaults synchronize]; 
    NSLog(@"The date is less than now. Pickerdate is %@",pickerdate); 
} 

編輯:修改代碼,我的邏輯倒退了,但問題依然存在。

+1

不能使用'> ='(或類似)運算符來比較兩個'NSDate'對象。這些是物體。您必須使用'compare:'方法來比較兩個日期。就像你一樣,你正在比較一下,看看一個對象指針是否大於或等於另一個對象指針。絕對不是你想要的。 – rmaddy 2013-04-18 03:27:14

+0

啊,這是有道理的。我忘了比較NSDate對象。我怎麼能找到一個比另一個大的呢? – Macness 2013-04-18 03:38:34

+0

查看isLaterThanOrEqualTo和isEarlierThanOrEqualTo的類參考。 – Macness 2013-04-18 03:41:50

回答

1

您不能使用>=(或類似)運算符來比較兩個NSDate對象。這些是物體。您必須使用compare:方法來比較兩個日期。就像你一樣,你正在比較一下,看看一個對象指針是否大於或等於另一個對象指針。絕對不是你想要的。

正確的更換將是:

if ([self.picker.date compare:[NSDate date]] != NSOrderAscending) { 

注意[NSDate date]給出了相同的結果[NSDate dateWithTimeIntervalSinceNow:0]