2013-04-18 99 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]